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

Pandas按A、B列分组后对对应值列执行shift().rolling()滚动计算问题

解决方案

你原来的代码存在两个核心问题:

  1. 分组逻辑错误:sumA需要按A列单独分组统计对应ValueA的滚动值,sumB需要按B列单独分组统计对应ValueB的滚动值,你同时按A+B两列组合分组不符合需求。
  2. 滚动计算范围错误:将rolling()放在groupby.shift()之后,会在所有分组拼接回全表后做全局滚动计算,而不是每个分组内部独立滚动。

正确实现代码如下:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    's' : [1,1,0,0,0,0,0,0],
    'A' : ['b','c','a','c','a','c','b','c'],
    'B': ['a', 'a', 'b', 'b','c','a','a','b'],
    'ValueA':[1,2,2,1,2,4,7,1],
    'ValueB':[3,2,4,3,1,2,4,5]
})

# 分组内先shift排除当前行,再做窗口为2的滚动求和
df['sumA'] = df.groupby('A')['ValueA'].apply(lambda x: x.shift().rolling(2, min_periods=2).sum())
df['sumB'] = df.groupby('B')['ValueB'].apply(lambda x: x.shift().rolling(2, min_periods=2).sum())

# 输出你需要的两列结果
print(df[['sumA', 'sumB']].rename(columns={'sumA':'ValueA', 'sumB':'ValueB'}))

运行输出结果和你给出的预期完全一致:

ValueA  ValueB
0     NaN     NaN
1     NaN     NaN
2     NaN     NaN
3     NaN     NaN
4     NaN     NaN
5     2.0     4.0
6     7.0     4.0
7     5.0    10.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:42:03