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

pandas按人名分组提取最大体重对应完整记录的方法

pandas按分组取指定列最大值对应整行的实现方法

你现有代码的问题:

  • 聚合时只选中了age列计算最大值,自然不会返回weight列的数据
  • 你的需求是取每个name分组下weight值最大的完整记录,单独对某一列做聚合运算,没法自动匹配同一条记录的其他字段值

推荐实现方法(性能最优)

用idxmax()定位每个分组中weight最大值对应的原表行索引,直接筛选对应行后调整列顺序即可:

import pandas as pd

data = {'name':['dave','bob','barry','bob','dave','barry'],
        'age':[35,30,41,50,44,53],
        'weight':[144,158,150,187,250,197]}
df = pd.DataFrame(data)

# 核心逻辑:分组找weight最大的行索引 → 筛选行 → 按要求排序列顺序 → 重置索引
result = df.loc[df.groupby('name')['weight'].idxmax(), ['name', 'age', 'weight']].reset_index(drop=True)
print(result)

运行输出符合要求:

name  age  weight
0  barry   53     197
1    bob   50     187
2   dave   44     250

简易写法(适合小数据集)

先按weight降序排序,再按name去重保留第一条(也就是weight最大的记录),逻辑更直观:

result = df.sort_values('weight', ascending=False) \
           .drop_duplicates(subset='name', keep='first') \
           [['name', 'age', 'weight']] \
           .reset_index(drop=True)

避坑提醒:不要直接使用df.groupby('name').max()实现该需求,这种写法会对分组下的每一列独立计算最大值,会出现字段错配问题——如果某个name下age最大的记录和weight最大的记录不是同一条,返回的age和weight会来自不同行,结果完全错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:00:49