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

Pandas rolling窗口步长等于窗口大小时求和结果异常求助

问题原因与解决方案

首先明确你的目标:对pd.Series(range(16))按连续4个元素分组求和,得到[6,22,38,54]。

为什么rolling参数调整后会出问题?

当你使用rolling(window=4, step=4)时,closed参数的作用是控制窗口的闭合区间:

  • closed='right'(默认):窗口包含右端点,每个窗口对应索引[0-3], [4-7], [8-11], [12-15],求和结果为6,22,38,54,结果索引为3,7,11,15
  • closed='left':窗口包含左端点,窗口对应索引同样是上述分组,结果索引为0,4,8,12,求和值也正确
  • 若设置closed='neither',窗口不包含两端,会导致每个窗口只取中间2个元素,结果完全不符合预期
  • 如果你使用的是Pandas 1.3.0之前的版本,step参数在rolling中的行为存在bug,可能会丢失最后一个窗口的结果

正确的rolling用法

确保你的Pandas版本≥1.3.0,直接使用以下代码即可得到预期结果:

import pandas as pd
s = pd.Series(range(16))
result = s.rolling(window=4, step=4).sum()
# 转换为整数列表:
result_list = [int(x) for x in result.tolist()]  # [6, 22, 38, 54]

更简洁的替代方案:groupby

对于这种非重叠固定窗口分组的需求,用groupby比rolling更直观,代码也更简洁:

import pandas as pd
s = pd.Series(range(16))
result = s.groupby(s.index // 4).sum()
result_list = result.tolist()  # [6,22,38,54]

这里s.index //4会把索引0-3归为组0,4-7归为组1,以此类推,直接分组求和即可得到你要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 20:13:08