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

Pandas groupby取最大值时如何保留对应非分组列

需求说明

现有如下测试DataFrame:

import pandas as pd
df = pd.DataFrame({
    "id": ["a", "a", "a", "b", "b"],
    "type1": ["main", "main", "main", "second", "second"],
    "type2": ["regular", "unregular", "large", "regular", "unregular"],
    "val": [3,5,3,80,90]
})

按id、type1列分组取val列最大值时,直接使用df.groupby(["id","type1"])["val"].max().reset_index()仅会返回分组键和聚合后的val列,丢失最大值对应的type2字段,需要保留完整行数据。

实现方案

方案1:idxmax定位行索引(单最大值场景首选)

groupby的idxmax()方法会直接返回每个分组中val取最大值的行在原表中的索引,用loc筛选对应行即可保留全部字段:

res = df.loc[df.groupby(["id", "type1"])["val"].idxmax()].reset_index(drop=True)

运行后输出结果完全匹配预期:

id   type1      type2  val
0  a    main  unregular    5
1  b  second  unregular   90

方案2:transform匹配最大值(适合保留并列最大值场景)

如果分组内可能存在多个val等于最大值的行、需要全部保留,可以用transform把分组最大值广播到每一行,再做布尔筛选:

res = df[df["val"] == df.groupby(["id", "type1"])["val"].transform("max")].reset_index(drop=True)

注意:如果同组存在多个最大值行,该方法会返回所有符合条件的行,方案1的idxmax()仅会返回分组内第一个出现的最大值行,可根据业务场景选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:39:20