猿问

按组滚动总和

考虑这个简单的例子


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按组的滚动总和。我尝试简单的


df['rolling_sum'] = df.groupby('group').value.rolling(2).sum()

TypeError: incompatible index of inserted column with frame index

一个变体apply似乎也不起作用


df['rolling_sum'] = df.groupby('group').apply(lambda x: x.value.rolling(2).sum())

TypeError: incompatible index of inserted column with frame index

我在这里缺少什么?谢谢!


慕神8447489
浏览 89回答 1
1回答

holdtom

的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_sum0 2018-01-01     a      1              2          NaN1 2018-01-01     a      2              2          3.02 2018-01-01     b      3              2          NaN3 2018-01-01     b      4              2          7.0细节rs# Annoying Index Level# |# v# group   # a      0    NaN#        1    3.0# b      2    NaN#        3    7.0# Name: value, dtype: float64或者,您可以通过使用绕过添加的索引 pd.concatdf.assign(rolling_sum=pd.concat(s.rolling(2).sum() for _, s in df.groupby('group').value))        date group  value  value_useless  rolling_sum0 2018-01-01     a      1              2          NaN1 2018-01-01     a      2              2          3.02 2018-01-01     b      3              2          NaN3 2018-01-01     b      4              2          7.0
随时随地看视频慕课网APP

相关分类

Python
我要回答