2017-08-03 1 views
0

私はマルチインデックスと、次のデータフレームを持っている:)(ローリング使用したマルチインデックスデータフレームをパンダに新しい列を追加し、最大()

dates = pd.date_range(start='2016-01-01 09:30:00', periods=20, freq='s') 
df = pd.DataFrame({'A': [1] * 20 + [2] * 12 + [3] * 8, 
       'B': np.concatenate((dates, dates)), 
      'C': np.arange(40)}) 
df = df.set_index(["B","A"]) 

は、今私は、最大値である新しい列を作成したいですインデックスAの最後の二つの値は、私は、次の試み:

df.loc[:,"D"] = df.groupby(level="A").rolling(2).max() 

しかし、グループ化されたデータフレームのインデックスの順序が、元の反対であるので、それだけで、新しい列(「D)のためにN/Aを生成しますデータフレーム。

どうすればこの問題を解決できますか?私は大きいデータフレームを持っているので、スタッキング/アンスタッキング、スワップレベル/ソートレベル、結合または連結から遠ざかり、これらの操作はかなり時間がかかる傾向があります。

答えて

2

あなたはマルチインデックスの最初のレベルを取り除くためのreset_indexdropとパラメータが必要ですので、

df['D'] = df.groupby(level="A")['C'].rolling(2).max().reset_index(level=0, drop=True) 
print (df) 
         C  D 
B     A   
2016-01-01 09:30:00 1 0 NaN 
2016-01-01 09:30:01 1 1 1.0 
2016-01-01 09:30:02 1 2 2.0 
2016-01-01 09:30:03 1 3 3.0 
2016-01-01 09:30:04 1 4 4.0 
2016-01-01 09:30:05 1 5 5.0 
2016-01-01 09:30:06 1 6 6.0 
2016-01-01 09:30:07 1 7 7.0 
2016-01-01 09:30:08 1 8 8.0 
2016-01-01 09:30:09 1 9 9.0 
2016-01-01 09:30:10 1 10 10.0 
2016-01-01 09:30:11 1 11 11.0 
2016-01-01 09:30:12 1 12 12.0 
2016-01-01 09:30:13 1 13 13.0 
2016-01-01 09:30:14 1 14 14.0 
2016-01-01 09:30:15 1 15 15.0 
2016-01-01 09:30:16 1 16 16.0 
2016-01-01 09:30:17 1 17 17.0 
2016-01-01 09:30:18 1 18 18.0 
2016-01-01 09:30:19 1 19 19.0 
2016-01-01 09:30:00 2 20 NaN 
2016-01-01 09:30:01 2 21 21.0 
... 
... 

を:

print (df.groupby(level="A")['C'].rolling(2).max()) 
A B     A 
1 2016-01-01 09:30:00 1  NaN 
    2016-01-01 09:30:01 1  1.0 
    2016-01-01 09:30:02 1  2.0 
    2016-01-01 09:30:03 1  3.0 
    2016-01-01 09:30:04 1  4.0 
    2016-01-01 09:30:05 1  5.0 
    2016-01-01 09:30:06 1  6.0 
    2016-01-01 09:30:07 1  7.0 
    2016-01-01 09:30:08 1  8.0 
    2016-01-01 09:30:09 1  9.0 
    2016-01-01 09:30:10 1 10.0 
    2016-01-01 09:30:11 1 11.0 
    2016-01-01 09:30:12 1 12.0 
    2016-01-01 09:30:13 1 13.0 
    2016-01-01 09:30:14 1 14.0 
    2016-01-01 09:30:15 1 15.0 
    2016-01-01 09:30:16 1 16.0 
    2016-01-01 09:30:17 1 17.0 
    2016-01-01 09:30:18 1 18.0 
    2016-01-01 09:30:19 1 19.0 
2 2016-01-01 09:30:00 2  NaN 
    2016-01-01 09:30:01 2 21.0 
... 
... 
関連する問題