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

如何在pandas DataFrame中筛选每个分组对应指定列最大值的行

Pandas按分组取某列最大值对应完整行的实现方法

你需要的是分组内目标列最大值对应的原始行,直接用groupby.max()会对每列单独取最大值,和需求不符,以下是几种常用实现方案:

方法1:groupby.idxmax()(仅返回每组第一个最大值行)

如果每组只有一个最大值,或者只需要第一个出现的最大值行,用这个方法最便捷:

# 按[Make, Model]分组,提取每组Customer Rating最大值对应的行索引
max_idx = df.groupby(['Make', 'Model'])['Customer Rating'].idxmax()
# 用索引筛选原DataFrame的完整行
result = df.loc[max_idx]

特点:逻辑简单效率高,遇到并列最大值时仅返回第一个出现的行。

方法2:groupby.transform()(返回分组内所有最大值行)

如果需要保留同一分组内所有并列最大值的行,用这个方案:

# 生成与原表长度一致的序列,每个位置对应所在分组的Customer Rating最大值
group_max = df.groupby(['Make', 'Model'])['Customer Rating'].transform('max')
# 筛选原表中Customer Rating等于分组最大值的行
result = df[df['Customer Rating'] == group_max]

特点:所有符合最大值条件的行都会被保留,适合存在并列极值的场景。

方法3:排序+去重(逻辑直观,支持自定义排序规则)

如果需要额外自定义排序逻辑来决定并列最大值时保留哪一行,可以用这个方案:

# 先按分组列升序、Customer Rating降序排序,确保每个分组的最大值行排在最前
sorted_df = df.sort_values(by=['Make', 'Model', 'Customer Rating'], ascending=[True, True, False])
# 按分组列去重,保留第一个出现的行(即最大值行)
result = sorted_df.drop_duplicates(subset=['Make', 'Model'], keep='first')

示例运行结果

用你提供的测试数据,以上方法返回的结果如下:

索引OwnerMakeModelMax SpeedCustomer Rating
0BobFordBronco8090
3SteveFordModel T4575
4KellyJeepWrangler7299

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:54:05