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

使用groupby.sum后如何筛选出仅含最大值的观测数据?

如何在groupby求和后筛选出每组最大值的观测数据?

先给出你的样本数据:

import pandas as pd

df = pd.DataFrame({
    'Company': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
    'Model': ['A1', 'A2', 'A1', 'A3', 'A1', 'A2', 'A2', 'A3'],
    'Units_sold': [55, 67, 58, 72, 52, 64, 68, 83]
})

执行分组求和后,先把结果转为普通DataFrame(方便后续处理):

sum_df = df.groupby(['Company', 'Model'])['Units_sold'].agg('sum').reset_index()

此时输出为:

Company Model  Units_sold
0       A    A1         113
1       A    A2          67
2       A    A3          72
3       B    A1          52
4       B    A2         132
5       B    A3          83

要筛选出每个Company下Units_sold总和最大的记录,有两种实用方法:

方法一:用transform标记组内最大值

transform会为每条数据生成对应分组的最大值,直接匹配筛选即可:

# 为每条数据添加对应Company组的最大销量总和
sum_df['group_max'] = sum_df.groupby('Company')['Units_sold'].transform('max')
# 筛选销量总和等于组内最大值的记录,删除辅助列
result = sum_df[sum_df['Units_sold'] == sum_df['group_max']].drop('group_max', axis=1)
# 还原为多级索引格式
result = result.set_index(['Company', 'Model'])

方法二:排序后取每组第一条

先按Company升序、Units_sold降序排序,再按Company分组取第一条:

sum_df = df.groupby(['Company', 'Model'])['Units_sold'].agg('sum').reset_index()
# 按指定规则排序
sorted_df = sum_df.sort_values(['Company', 'Units_sold'], ascending=[True, False])
# 分组取每组第一条记录并重置索引
result = sorted_df.groupby('Company').head(1).set_index(['Company', 'Model'])

最终结果符合你的期望:

Company  Model
A        A1       113
B        A2       132

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:55:19