如何使用groupby按分组根据两列差值填充目标列?
分组计算Top列的实现方案
你需求里的Max FGrating列本质是同HorseId分组内上一行的FGrating值,计算可按两种场景实现:
场景1:已存在Max FGrating列
直接按规则判断即可,代码如下:
import pandas as pd # 先将Max FGrating列的空值转为NaN,统一数值类型 df['Max FGrating'] = pd.to_numeric(df['Max FGrating'], errors='coerce') # 生成Yes/No格式的Top列 df['Top'] = df.apply( lambda row: 'Yes' if pd.notna(row['Max FGrating']) and (row['FGrating'] - row['Max FGrating'] >=4) else 'No', axis=1 ) # 若需要1/0格式的Top列,替换为以下代码即可 # df['Top'] = (pd.notna(df['Max FGrating']) & (df['FGrating'] - df['Max FGrating'] >= 4)).astype(int)
场景2:还未生成Max FGrating列
先按HorseId分组生成该列,再计算Top:
# 取同HorseId分组内上一行的FGrating作为当前行的Max FGrating df['Max FGrating'] = df.groupby('HorseId')['FGrating'].shift(1) # 后续执行和场景1完全相同的Top列计算逻辑即可
效果验证
用你提供的示例数据运行上述代码后,输出结果和你给出的Top列示例完全匹配。
内容的提问来源于stack exchange,提问作者Bogdan Doicin
相关产品推荐
相关产品推荐

