You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas滚动求和:将窗口计算值置于窗口起始位置的实现方法

嘿,这个需求我刚好踩过坑!Pandas的rolling方法默认确实把计算结果放在窗口的末尾,但要把滚动求和的结果挪到窗口的起始位置,完全不用写循环,用Pandas自带的方法组合就能搞定,我给你两种实用的方案:

方案1:滚动求和 + 移位操作(最直观)

核心思路是先按默认方式计算滚动窗口的求和结果(放在窗口末尾),再通过shift()方法把结果往前移动「窗口大小-1」的步长,这样就刚好对应到窗口的起始位置了。

举个具体的例子,假设我们有这样的DataFrame:

import pandas as pd

df = pd.DataFrame({'value': [1, 2, 3, 4, 5, 6, 7, 8]})
window_size = 4  # 窗口大小为4

执行以下代码:

# 第一步:计算默认的滚动求和(结果在窗口末尾)
df['rolling_sum_end'] = df['value'].rolling(window=window_size).sum()
# 第二步:将结果移位到窗口起始位置,移位步长为 -(window_size - 1)
df['rolling_sum_start'] = df['rolling_sum_end'].shift(-(window_size - 1))

最终输出的rolling_sum_start列就是你要的结果:

  • 索引0(窗口起始位置)对应1+2+3+4=10
  • 索引1对应2+3+4+5=14
  • 以此类推,最后3行是NaN(因为没有足够的后续数据形成完整窗口)

方案2:反向滚动 + 反转数据(适合特殊场景)

如果你不想先计算末尾的结果,也可以通过反转数据的方式实现:

# 反转数据后计算滚动求和,再反转回来
df['rolling_sum_start'] = df['value'][::-1].rolling(window=window_size).sum()[::-1]

这个方法的逻辑是:把数据倒过来后,原来的窗口起始位置就变成了新数据的窗口末尾,计算完滚动求和再反转回去,结果就自动对应到原数据的窗口起始位置了。效果和方案1完全一致,只是实现思路不同。

两种方法都是基于Pandas的向量式操作,比手写循环高效太多,尤其是处理大数据量的时候优势明显。

内容的提问来源于stack exchange,提问作者dudeguy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:05:25