1 回答
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
添加回答
举报