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

按多列分组后筛选每个供应商对应金额最大的类别行

按多列分组后筛选每个供应商对应金额最大的类别行

嗨,我来帮你解决这个问题!你现在的需求是从已经按Supplier和Category分组求和后的DataFrame里,给每个供应商只保留金额最大的那个类别对应的行对吧?我给你几个简单好用的pandas实现方法,你可以根据场景选择:

方法一:使用groupby + idxmax()

这个方法会先定位每个供应商组内金额最大的行索引,再提取对应行,逻辑清晰直接:

# 假设你的DataFrame名为df
# 获取每个供应商组内Amount最大值对应的行索引
max_row_indices = df.groupby('Supplier')['Amount'].idxmax()
# 根据索引提取目标行,重置索引让结果更整洁
result_df = df.loc[max_row_indices].reset_index(drop=True)

方法二:使用rank()函数标记排名

通过给每个供应商组内的金额排名,筛选出排名第一的行,还能灵活处理同金额的情况:

# 给每个供应商组内的Amount降序排名,method='first'表示同金额时保留最先出现的行
df['amount_rank'] = df.groupby('Supplier')['Amount'].rank(ascending=False, method='first')
# 筛选排名第一的行,删除临时排名列并重置索引
result_df = df[df['amount_rank'] == 1].drop('amount_rank', axis=1).reset_index(drop=True)

如果想保留所有金额并列最大的行,可以把method='first'换成method='min',这样所有最大值的行都会被标记为排名1。

方法三:排序后去重

先按供应商分组、金额降序排序,再保留每个供应商的第一行,操作直观易懂:

result_df = df.sort_values(by=['Supplier', 'Amount'], ascending=[True, False])\
              .drop_duplicates(subset='Supplier')\
              .reset_index(drop=True)

备注:内容来源于stack exchange,提问作者user2981194

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:44:50