分组滚动总和

2024-03-29 15:43:45 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑这个简单的例子

df = pd.DataFrame({'date' : [pd.to_datetime('2018-01-01'), 
                             pd.to_datetime('2018-01-01'), 
                             pd.to_datetime('2018-01-01'), 
                             pd.to_datetime('2018-01-01')],
                   'group' : ['a','a','b','b'],
                   'value' : [1,2,3,4],
                   'value_useless' : [2,2,2,2]})

df
Out[78]: 
        date group  value  value_useless
0 2018-01-01     a      1              2
1 2018-01-01     a      2              2
2 2018-01-01     b      3              2
3 2018-01-01     b      4              2

这里我要按组计算value的滚动和。我试着简单点

^{2}$

带有apply的变量似乎也不起作用

df['rolling_sum'] = df.groupby('group').apply(lambda x: x.value.rolling(2).sum())
TypeError: incompatible index of inserted column with frame index

我错过了什么?谢谢!在


Tags: todataframedfdatetimedateindexvaluegroup
1条回答
网友
1楼 · 发布于 2024-03-29 15:43:45

groupby正在添加一个妨碍您的索引级别。在

rs = df.groupby('group').value.rolling(2).sum()
df.assign(rolling_sum=rs.reset_index(level=0, drop=True))

        date group  value  value_useless  rolling_sum
0 2018-01-01     a      1              2          NaN
1 2018-01-01     a      2              2          3.0
2 2018-01-01     b      3              2          NaN
3 2018-01-01     b      4              2          7.0

详情

^{pr2}$

或者,可以使用pd.concat绕过添加的索引

df.assign(rolling_sum=pd.concat(s.rolling(2).sum() for _, s in df.groupby('group').value))

        date group  value  value_useless  rolling_sum
0 2018-01-01     a      1              2          NaN
1 2018-01-01     a      2              2          3.0
2 2018-01-01     b      3              2          NaN
3 2018-01-01     b      4              2          7.0

相关问题 更多 >