2017-02-08 4 views
2

groupby()とそれに続いてmulti-levelインデックスを使用した計算を行うと、インデックスが繰り返されます - 最も奇妙です。私は、id列は現在、マルチインデックスに二度現れるということです何奇数である複数レベルのインデックスを持つPandas Dataframeでgroupbyとrollingウィンドウを実行すると、インデックスエントリが重複して表示されます

id id date 
1 1 1  NaN 
     2  40.0 
     3  80.0 
2 2 1  NaN 
     2  42.0 
     3  82.0 
Name: d1, dtype: float64 
MultiIndex(levels=[[1, 2], [1, 2], [1, 2, 3]], 
      labels=[[0, 0, 0, 1, 1, 1], [0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]], 
      names=[u'id', u'id', u'date']) 

を次のように出力されているパンダ0.18.1

import pandas as pd 
df = pd.DataFrame(data=[[1, 1, 10, 20], [1, 2, 30, 40], [1, 3, 50, 60], 
         [2, 1, 11, 21], [2, 2, 31, 41], [2, 3, 51, 61]], 
        columns=['id', 'date', 'd1', 'd2']) 

df.set_index(['id', 'date'], inplace=True) 
df = df.groupby(level='id').rolling(window=2)['d1'].sum() 
print(df) 
print(df.index) 

を使用しています。 ['d1']列の選択を前後に移動しても差はありません。

ご協力いただければ幸いです。

おかげ ポール

答えて

0

それはbugです。

しかしapplyとバージョンが素敵な作品、この代替はhereです(のみd1applyに移動されました):

df = df.groupby(level='id').d1.apply(lambda x: x.rolling(window=2).sum()) 
print(df) 
id date 
1 1  NaN 
    2  40.0 
    3  80.0 
2 1  NaN 
    2  42.0 
    3  82.0 
Name: d1, dtype: float64 
+0

ありがとうございました。これが修正されるまで適用(ローリング)するように切り替わります。 –

関連する問題