如何在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)
代码说明:
- 将分组列名修正为
name,确保分组逻辑生效; - 设置
min_periods=6,只有当窗口内凑齐6个数据时才计算求和,前5行自动返回NaN,匹配需求; - 通过
reset_index(drop=True)将分组计算结果合并回原DataFrame,保证索引对齐。
运行后得到的rolling_sum列与expected_rolling_sum列完全一致,符合需求。
内容的提问来源于stack exchange,提问作者Alierwai
相关产品推荐
相关产品推荐

