Python-GroupBy对象的滚动功能
问题内容:
我有一个grouped
类型的时间序列对象<pandas.core.groupby.SeriesGroupBy object at 0x03F1A9F0>
。grouped.sum()
给出期望的结果,但我无法获得rolling_sum与该groupby
对象一起使用。有什么方法可以将滚动功能应用于groupby
对象吗?例如:
x = range(0, 6)
id = ['a', 'a', 'a', 'b', 'b', 'b']
df = DataFrame(zip(id, x), columns = ['id', 'x'])
df.groupby('id').sum()
id x
a 3
b 12
但是,我希望有这样的东西:
id x
0 a 0
1 a 1
2 a 3
3 b 3
4 b 7
5 b 12
问题答案:
注意: 如@kekert所标识,以下熊猫模式已被弃用。请参阅下面的答案中的当前解决方案。
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
In [17]: df.groupby('id')['x'].cumsum()
Out[17]:
0 0
1 1
2 3
3 3
4 7
5 12