如何为分组数据计算带偏移的累积和(滞后累积和)

浅伟吖_8158

浅伟吖_8158

2026-07-20

597人浏览

原创

如何为分组数据计算带偏移的累积和(滞后累积和)

本文介绍如何在 pandas 中为按类别分组的数据计算“滞后累积和”——即每个组内当前行的累积值不包含本行数据,而是截至前一行的累计总和,适用于特征工程中构建时序依赖型特征。

本文介绍如何在 pandas 中为按类别分组的数据计算“滞后累积和”——即每个组内当前行的累积值不包含本行数据,而是截至前一行的累计总和,适用于特征工程中构建时序依赖型特征。

在机器学习建模(尤其是体育赛事预测、用户行为分析等时序场景)中,常需构造“截至上一事件的累计统计量”作为特征。例如:预测某球队主场得分时,应使用其历史主场得分总和(不含当前场次),而非包含当前场次的即时累计值——否则会引入未来信息,导致数据泄露。

Pandas 提供了灵活的分组与窗口操作能力,但直接链式调用 .shift().cumsum() 容易出错(如问题中所示),因为 shift 作用于原始序列,而 cumsum 若在全局或错误层级执行,将破坏分组逻辑。正确做法是:先按组计算累积和,再对结果整体偏移一行。

Pic Copilot
Pic Copilot

Pic Copilot是阿里国际推出的面向电商卖家的 AI 商品图和营销设计工具。

下载

✅ 正确实现方式

使用 groupby().transform() 配合匿名函数,确保每组独立计算并保持原始索引对齐:

data['cumulative'] = (
    data.groupby('home_id')['home_score']
    .transform(lambda x: x.cumsum().shift(1))
    .fillna(0)
    .astype(int)
)
  • groupby('home_id'):按球队 ID 分组;
  • transform(...):保证输出与原 DataFrame 等长,且自动对齐;
  • lambda x: x.cumsum().shift(1):对每组 home_score 先累加,再整体下移一行(首行变 NaN);
  • .fillna(0).astype(int):将首行 NaN 替换为 0,并转为整型,符合业务语义(无历史记录时累计值为 0)。

⚠️ 常见误区与注意事项

  • ❌ 错误写法:data.groupby('home_id')['home_score'].shift().cumsum()
    → shift() 在分组后作用于每组首尾,但 cumsum() 会在整个 shift 后的 Series 上全局累加,破坏分组边界。
  • ✅ 必须保证 cumsum() 和 shift() 在同一分组内完成:transform 内部的 lambda 函数天然满足此要求。
  • ? 时间顺序至关重要:示例数据已按 game_date 排序。若原始数据未排序,请务必先执行 data.sort_values(['home_id', 'game_date'], inplace=True),否则累积逻辑将失效。
  • ? 扩展应用:该模式可推广至任意滞后阶数(如 shift(2) 表示截至前两场)、其他聚合(如 cummean())、或多字段组合(如 cumsum() + rolling(3).mean())。

通过这一简洁可靠的模式,你可安全地为任意分组时序特征生成无数据泄露的滞后累积特征,显著提升模型泛化能力与工程健壮性。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1631

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4004

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1629

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

23037

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2827

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2867

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1123

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2223

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习