次の形式の pandas DataFrame があります。
import pandas as pd
df = pd.DataFrame({
'a': [1,2,3,4,5,6],
'b': [0,1,0,1,0,1]
})
「b」の値でデータをグループ化し、各グループの「a」のローリング合計を含む新しい列「c」を追加してから、すべてのグループをグループ化されていない DataFrame に再結合して、「 c'列。私は限りました:
for i, group in df.groupby('b'):
group['c'] = group.a.rolling(
window=2,
min_periods=1,
center=False
).sum()
しかし、このアプローチにはいくつかの問題があります。
forループを使用して各グループを操作すると、大きなDataFrame(私の実際のデータなど)では遅くなるように感じます
グループごとに列 'c' を保存して元の DataFrame に戻すエレガントな方法が見つかりません。各グループの c を配列に追加したり、同様のインデックス配列で圧縮したりすることはできますが、それは非常にハックに思えます。ここで見逃している組み込みの pandas メソッドはありますか?