本文介绍在 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))
✅ 关键点解析:
⚠️ 常见错误警示:
不要嵌套 shift() 和 cumsum() 的顺序(如 shift().cumsum()),这会导致跨组污染或逻辑错乱;也不建议用 groupby(...).shift().cumsum(),它先整体偏移再累加,破坏了分组边界。
? 进阶提示:若数据未按时间排序,务必在计算前执行 data.sort_values(['home_id', 'game_date'], inplace=True),确保累积逻辑基于真实比赛时序。此步骤虽未显式出现在示例中,但在实际建模中不可或缺。