为了账号安全,请及时绑定邮箱和手机立即绑定

按组滚动总和

按组滚动总和

慕神8447489 2021-06-08 14:41:44
考虑这个简单的例子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]})dfOut[78]:         date group  value  value_useless0 2018-01-01     a      1              21 2018-01-01     a      2              22 2018-01-01     b      3              23 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我在这里缺少什么?谢谢!
查看完整描述

1 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

的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

细节

rs


# Annoying Index Level

# |

# v

# group   

# a      0    NaN

#        1    3.0

# b      2    NaN

#        3    7.0

# Name: value, dtype: float64

或者,您可以通过使用绕过添加的索引 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


查看完整回答
反对 回复 2021-06-15
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信