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

Pandas DataFrame使用groupby按条件筛选行:获取各联合会最高奖牌对应项目

实现方案

方案1:只取每个分组首个最大值对应的行

如果不需要处理并列最大值的情况,用idxmax()获取每个分组最大值对应的行索引后直接筛选即可:

# 按Federation分组,取Medal_each_game最大值对应的行,重置索引
res = df.loc[df.groupby('Federation')['Medal_each_game'].idxmax()].reset_index(drop=True)

逻辑说明:groupby('Federation')['Medal_each_game'].idxmax()会返回每个联合会最高奖牌数对应的行原始索引,用loc定位这些行后重置索引,就能得到目标结果。

方案2:保留所有并列最大值的行

如果同一个联合会存在多个项目奖牌数同为最高的场景,用transform做布尔筛选更合适:

# 筛选每个分组内等于最大值的所有行,重置索引
res = df[df['Medal_each_game'] == df.groupby('Federation')['Medal_each_game'].transform('max')].reset_index(drop=True)

逻辑说明:transform('max')会将每个分组的最大值填充到分组内的所有行,通过等值判断可以过滤出所有符合最高奖牌数条件的行。

完整可运行测试代码

import pandas as pd

# 构造示例DataFrame
data = {
    'Federation': ['AFG', 'AFG', 'AFG', 'AFG', 'AFG', 'AFG', 'AHO', 'AHO', 'AHO', 'AHO'],
    'Game': ['Athletics', 'Boxing', 'Football', 'Hockey', 'Taekwondo', 'Wrestling', 'Athletics', 'Boxing', 'Fencing', 'Football'],
    'Medal_each_game': [1.0, 0.0, 1.0, 0.0, 2.0, 0.0, 0.0, 3.0, 2.0, 0.0]
}
df = pd.DataFrame(data)

# 执行方案1代码
res = df.loc[df.groupby('Federation')['Medal_each_game'].idxmax()].reset_index(drop=True)
print(res)

运行输出和示例完全一致:

Federation       Game  Medal_each_game
0        AFG  Taekwondo              2.0
1        AHO     Boxing              3.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:54:02