累計
質問に直接答えるために、cumsum メソッドは目的の系列を生成します。
In [17]: df
Out[17]:
id x
0 a 0
1 a 1
2 a 2
3 b 3
4 b 4
5 b 5
In [18]: df.groupby('id').x.cumsum()
Out[18]:
0 0
1 1
2 3
3 3
4 7
5 12
Name: x, dtype: int64
グループごとの pandas ローリング関数
より一般的には、ローリング関数は次のように各グループに適用できます (@kekert がコメントした新しい .rolling メソッドを使用)。戻り値の型は、以前の (非推奨の) pd.rolling_* メソッドとは異なるマルチインデックス シリーズであることに注意してください。
In [10]: df.groupby('id')['x'].rolling(2, min_periods=1).sum()
Out[10]:
id
a 0 0.00
1 1.00
2 3.00
b 3 3.00
4 7.00
5 9.00
Name: x, dtype: float64
グループごとのローリング関数を適用し、元のデータフレームの順序で結果を受け取るには、代わりに変換を使用する必要があります。
In [16]: df.groupby('id')['x'].transform(lambda s: s.rolling(2, min_periods=1).sum())
Out[16]:
0 0
1 1
2 3
3 3
4 7
5 9
Name: x, dtype: int64
非推奨のアプローチ
参考までに、廃止された pandas.rolling_mean の動作は次のとおりです。
In [16]: df.groupby('id')['x'].apply(pd.rolling_mean, 2, min_periods=1)
Out[16]:
0 0.0
1 0.5
2 1.5
3 3.0
4 3.5
5 4.5