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

如何为Pandas DataFrame新增win列:按ID标记高分获胜者

给Pandas DataFrame按组标记胜负列

原始数据

id   points
677    5
677    15
678    25
678    6

需求

每个id对应两行数据(代表一场比赛),新增win列:同一id下分数更高的行标记为1,分数更低的标记为0,最终效果如下:

id   points  win
677    5      0
677    15     1
678    25     1
678    6      0

解决方案

方法一:分组后比较最大值

利用groupby按id分组,通过transform对每组的points判断是否等于组内最大值,再转成整数:

df['win'] = df.groupby('id')['points'].transform(lambda x: x == x.max()).astype(int)

方法二:分组排名法

通过rank给每组的points降序排名,排名第一的标记为1,其余为0:

df['win'] = (df.groupby('id')['points'].rank(ascending=False) == 1).astype(int)

对原有代码的说明

你之前尝试的代码只能筛选出分数有上升的id,无法直接生成每行对应的胜负标记。上面的两种方法可以直接对每行数据进行判断,高效生成目标列。

内容的提问来源于stack exchange,提问作者Josh Johnson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:45:39