最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何为分组数据计算带偏移的累积和(当前行不包含自身值的累计和)
时间:2026-07-25 08:57:05 编辑:袖梨 来源:一聚教程网
本文介绍在 pandas 中为按组(如球队 id)计算“滞后型”累积和的方法——即每个组内,当前行的累积值等于该组此前所有行(不含当前行)的和,常用于机器学习特征工程中的时序状态建模。
本文介绍在 pandas 中为按组(如球队 id)计算“滞后型”累积和的方法——即每个组内,当前行的累积值等于该组此前所有行(不含当前行)的和,常用于机器学习特征工程中的时序状态建模。
在构建体育赛事预测模型(如球队得分预测)时,一个关键特征是:某队在当前主场比赛前的历史主场总得分。这要求我们对 home_score 按 home_id 分组后,计算不包含当前行的累积和(即“向前偏移一位”的累积和),而非标准的 cumsum()(含自身)。直接使用 groupby(...).cumsum() 会将当前得分计入结果,而我们需要的是“截至上一场的累计值”。
正确实现方式是:在分组内先计算累积和,再整体下移一行(shift(1)),最后填充首行为 0 并转为整型。推荐代码如下:
data['cumulative'] = (data.groupby('home_id')['home_score'] .transform(lambda x: x.cumsum().shift(1)) .fillna(0) .astype(int))
✅ 关键点解析:
- groupby('home_id') 确保按球队独立计算;
- transform(...) 保持原始索引对齐,避免 apply 可能引发的索引错位;
- x.cumsum().shift(1) 先累加再下移:[3,7,6] → [3,10,16] → [NaN,3,10],完美匹配目标(第 1 行为 0,第 2 行为 3,第 3 行为 10);
- fillna(0) 将每组首行的 NaN 替换为 0(因无历史数据);
- astype(int) 消除浮点型 0.0,保证列类型整洁。
⚠️ 常见错误警示:
不要嵌套 shift() 和 cumsum() 的顺序(如 shift().cumsum()),这会导致跨组污染或逻辑错乱;也不建议用 groupby(...).shift().cumsum(),它先整体偏移再累加,破坏了分组边界。
? 进阶提示:若数据未按时间排序,务必在计算前执行 data.sort_values(['home_id', 'game_date'], inplace=True),确保累积逻辑基于真实比赛时序。此步骤虽未显式出现在示例中,但在实际建模中不可或缺。
相关文章
- 杖剑传说信号员洛天依角色属性解析 07-26
- 明日方舟终末地1.4版本懒人基建玩法指南 07-26
- Apex英雄动力小子快速上手玩法指引 07-26
- 《永劫无间》联动新武器千机伞爆料:可多形态切换! 07-26
- 模拟山羊3热狗人任务通关指南 07-26
- 鸣潮景燃角色定位总览 07-26