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

如何使用groupby按预定义条件获取分组字段的上一个值并填充列

错误原因

  • 拼写错误:筛选条件里把Grass拼成了Gress,会直接导致符合要求的行根本筛选不出来。
  • 对groupby返回值理解错误:df.groupby()操作返回的是GroupBy分组对象,不是普通DataFrame,该对象是按指定键分组后的容器,不会直接展示原列结构,所以你看不到HorseId列是正常现象,不是列真的消失了。
  • 逻辑链路不完整:你单独在筛选出来的temp对象上操作,最后没有把计算结果回写到原表featured_data的对应行,就算分组计算成功也实现不了需求。

正确实现方案

不需要单独拆分temp表,可以直接对原表的符合条件的行做赋值,代码如下:

# 定位符合条件的行,生成布尔掩码
mask = (featured_data['Track'] == 'Sha Tin') & (featured_data['Surface'] == 'Grass')
# 对符合条件的行,按HorseId分组取FGrating的上一行值,直接赋值给对应行的New FGrating
featured_data.loc[mask, 'New FGrating'] = featured_data[mask].groupby('HorseId')['FGrating'].shift(1)

如果你的数据没有按比赛时间先后排序,shift(1)取到的上一行不是实际的上一场比赛结果,可以先按HorseId+比赛时间字段排序后再执行上述代码。不符合条件的行原本默认值就是-1,不需要额外处理。

内容的提问来源于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:06:07