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

使用groupby按分组计算列截至当前行的累计平均值该如何实现?

代码问题说明

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

  1. 逻辑不匹配:你调用的groupby.mean()是计算每个HorseId分组下所有FGrating的整体平均值,返回的结果只有N条(N等于不同HorseId的数量),而你需要的是分组内逐行累计的平均值,不是全组统一的平均值。
  2. 索引不匹配:直接把长度为N的分组聚合结果赋值给原表长度为M(M是原表总行数)的列时,Pandas会按照索引对齐赋值,大部分行因为索引匹配不上会被填充为缺失值,这就是你说的「仅部分数据计算正确」的原因。

正确实现方案

首先要确保你的数据已经按照你需要的顺序排序(累计平均值和行的先后顺序强相关,比如按比赛时间排序),之后用扩张窗口expanding完成分组累计均值计算即可,代码如下:

# 按HorseId分组,计算分组内从第一行到当前行的累计平均值
featured_data['Average FGrating'] = featured_data.groupby('HorseId')['FGrating']\
    .expanding()\
    .mean()\
    .reset_index(level=0, drop=True)

代码说明:

  • expanding()会为分组内每一行创建一个包含当前行及之前所有行的窗口,计算每个窗口的平均值就是你要的累计平均值
  • 末尾的reset_index(level=0, drop=True)是为了去掉分组生成的额外HorseId索引,让结果的索引和原表完全对齐,避免赋值时出现缺失值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:24:04