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

如何在groupby聚合后显示DataFrame全部列以获取各游戏获胜者?

解决方法

要获取每个游戏获胜者的完整DataFrame行,可以用以下几种简洁的实现方式:

方法1:利用idxmax()和loc索引

idxmax()会返回每个分组中Score最大值对应的行索引,再通过loc取出这些完整行:

# 获取每个GameID组内Score最高的行索引
max_indices = df.groupby('GameID')['Score'].idxmax()
# 提取对应完整行
winner_df = df.loc[max_indices]

输出结果:

GameID Player  Score
2       1    Bob     30
4       2  Alice     25

方法2:用transform生成组内最大值后筛选

transform('max')会将每个组的最大值广播到组内所有行,再通过布尔索引筛选出符合条件的行:

# 添加列存储每个GameID的最高得分
df['game_max_score'] = df.groupby('GameID')['Score'].transform('max')
# 筛选得分等于组内最高的行,并移除临时列
winner_df = df[df['Score'] == df['game_max_score']].drop('game_max_score', axis=1)

如果同一游戏有多个并列最高分,这个方法会保留所有并列获胜者的行。

方法3:排序后取每组首行

先按GameID升序、Score降序排序,再分组取每组第一行:

winner_df = df.sort_values(by=['GameID', 'Score'], ascending=[True, False])\
              .groupby('GameID')\
              .head(1)

这种方法逻辑直观,默认取每组中第一个出现的最高分玩家。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:02:55