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

如何在Python中为分组后的DataFrame计算滚动求和

按组计算滚动求和问题

需求:按用户分组计算6期滚动求和,前5行结果显示为NaN,从第6行开始计算当前行及之前5行的score总和。

用户尝试的代码存在两个问题:

  • 分组时使用了不存在的列名player,实际列名为name;
  • rolling的min_periods=1会导致前5行也计算求和,不符合需求。

修正后的代码:

import pandas as pd
import numpy as np

john = pd.DataFrame({'name':'john',
                     'score':[0, 2, 1, 0, 0, 0, 0, 0, 0, 0],
                     'expected_rolling_sum':[np.nan, np.nan, np.nan, np.nan, np.nan, 3, 3, 1, 0, 0]})
                       
joe = pd.DataFrame({'name':'joe', 
                    'score':[1, 0, 0, 0, 0, 0, 0, 1, 0, 0],
                    'expected_rolling_sum':[np.nan, np.nan, np.nan, np.nan, np.nan, 1, 0, 1, 1, 1]})

# 合并数据并重置索引
df = pd.concat([john, joe]).reset_index(drop=True)

# 按name分组计算6期滚动求和,仅当窗口内有6个值时才返回结果
df['rolling_sum'] = df.groupby('name')['score'].rolling(window=6, min_periods=6).sum().reset_index(drop=True)

# 查看结果
print(df)

代码说明:

  1. 将分组列名修正为name,确保分组逻辑生效;
  2. 设置min_periods=6,只有当窗口内凑齐6个数据时才计算求和,前5行自动返回NaN,匹配需求;
  3. 通过reset_index(drop=True)将分组计算结果合并回原DataFrame,保证索引对齐。

运行后得到的rolling_sum列与expected_rolling_sum列完全一致,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:00:54