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

DataFrame使用groupby分组求最大值时如何保留全部原始列

需求说明

现有15列的DataFrame,已通过groupby实现按item_number_start分组、取每组item_number_revision列的最大值,需要最终结果同时保留原始DataFrame中其余所有列的对应值。

当前操作输出示例

实现方案

以下两种方法都可以保留所有原始列的对应值,不会额外篡改非聚合列数据:

  • 方法1:通过idxmax()定位最大值所在原始行
    idxmax()会返回每个分组下最大值对应的原始行索引,直接通过索引筛选原表即可拿到完整行数据:
# 获取每个分组下修订列最大值对应的原表行索引
max_row_idx = df.groupby('item_number_start')['item_number_revision'].idxmax()
# 从原表筛选对应行,得到包含全部15列的结果
result = df.loc[max_row_idx]
  • 方法2:排序后按分组去重
    先按目标列降序排序,让每个分组的最大值行排在最前面,再按分组列去重保留首行即可:
result = df.sort_values('item_number_revision', ascending=False)\
           .drop_duplicates(subset='item_number_start', keep='first')
避坑提示

不要直接调用df.groupby('item_number_start').max():该语法会对所有列统一执行取最大值操作,非数值列会返回分组内字典序最大的内容,和“最大值行对应的其他列原始值”逻辑不符,最终结果会出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:09:18