如何让DataFrame.rolling(3).sum()包含下方行而非上方行
实现向后滚动求和(当前行及下方行)
这个问题很常见——默认的rolling()方法是向前计算窗口(包含当前行及之前的行),而你需要的是向后窗口(当前行及之后的行)。别担心,我们可以通过反转数据的方式轻松实现:
解决方案代码
# 反转AccXCorrected列,执行滚动求和后再反转回原顺序 df_ts['XCorSum'] = df_ts['AccXCorrected'][::-1].rolling(3, min_periods=1).sum()[::-1]
原理说明
- 先反转
AccXCorrected列的顺序,把原来的“向后窗口”转换成默认的“向前窗口”; - 用
rolling(3, min_periods=1).sum()计算反转后的向前滚动求和; - 最后再把结果反转回来,就得到了原数据中当前行及之后2行的滚动求和。
验证你的示例数据
假设你的df_ts初始数据是:
| AccXCorrected |
|---|
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
运行上述代码后,XCorSum列会完全符合你的预期:
| AccXCorrected | XCorSum |
|---|---|
| 0 | 3 |
| 1 | 6 |
| 2 | 9 |
| 3 | 12 |
| 4 | 9 |
| 5 | 5 |
如果你的需求是完全不包含当前行,仅取下方的行,可以结合shift()调整逻辑,但根据你的预期结果,上面的代码已经完全匹配需求了。
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

