Pandas分组后如何返回每组指定列最大值对应的完整行DataFrame
分组提取MPG最大值对应整行的实现方案
问题原因
你当前的写法无法返回完整字段,核心存在两个问题:
- 调用方式错误:
pd.groupby()是非法调用,groupby是pandas DataFrame/Series的实例方法,需要通过你的DataFrame对象(示例中假设命名为df)调用,即df.groupby()。 - 聚合逻辑错误:
df.groupby(["Company"])["MPG"].max()仅对MPG列做最大值聚合,返回的是「分组-最大MPG值」的映射Series,不会携带Model、Year等其他字段。- 就算修正调用方式后写
df.groupby(["Company"]).max(),也是对所有列独立取最大值,会出现不同行的字段拼接错位,比如可能拿到A组最大的Year、最大的Displ拼在一起,不是MPG最大的那条原始记录。
可直接运行的正确代码
方案1:idxmax索引定位(全版本兼容,无错位风险)
通过idxmax()拿到每个分组MPG最大值对应的原始行索引,直接从原表取行,结果100%准确:
import pandas as pd # 定位每个公司分组下MPG最高的行索引 max_mpg_rows = df.groupby("Company")["MPG"].idxmax() # 提取完整行,重置索引 result = df.loc[max_mpg_rows].reset_index(drop=True)
方案2:排序后取分组首行(写法简洁)
先把全表按MPG降序排列,每个分组保留第一条记录,就是MPG最高的行:
result = df.sort_values("MPG", ascending=False).groupby("Company", as_index=False).head(1)
运行结果
两种方案输出完全匹配预期:
Company Model Year Trans Displ MPG 0 A A2 2020 Auto 2.0 67.3 1 B B4 2021 Manual 1.5 83.1
内容的提问来源于stack exchange,提问作者Tipu Sultan
相关产品推荐
相关产品推荐

