如何用Pandas rolling函数实现向后3个索引的滚动求和?
Pandas实现后续3个索引的滚动求和技巧
当然有啦!其实用Pandas的rolling函数结合一点小技巧就能轻松实现这种向前滚动求和(也就是对后续3个索引的数值求和)的需求,我给你两种实用的方法:
方法1:反转数组后滚动求和
这个方法的核心是通过反转Series,把“后续3个元素”的需求转换成常规的“前3个元素”滚动求和,之后再反转回来即可:
import pandas as pd import numpy as np s = pd.Series([0,1,2,3,4]) # 反转Series → 滚动求和 → 再次反转还原顺序 result = s[::-1].rolling(3).sum()[::-1]
执行后得到的结果就是:
0 3.0 1 6.0 2 9.0 3 NaN 4 NaN dtype: float64
完全符合你想要的[3, 6, 9, NaN, NaN]的效果。
方法2:利用shift函数调整结果位置
另一种更直接的思路是先计算常规的滚动求和,再通过shift函数把结果向前移动对应的位数:
import pandas as pd import numpy as np s = pd.Series([0,1,2,3,4]) # 先计算窗口为3的常规滚动求和 rolling_sum = s.rolling(3).sum() # 向前移动(窗口大小-1)位,末尾补NaN result = rolling_sum.shift(-2)
这里窗口大小是3,所以需要shift(-2),这样原本的[NaN, NaN, 3, 6, 9]就会被调整为目标结果。
两种方法都很高效,数据量较大时性能差异也可以忽略,你可以根据自己的习惯选择~
内容的提问来源于stack exchange,提问作者user369210
相关产品推荐
相关产品推荐

