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

如何按指定键分组并保留C列最大值行实现DataFrame去重?

按分组选择C列最大值的行

嘿,我来帮你搞定这个需求!你想要基于A和B这两个键分组,然后选出每组里C列数值最大的行对吧?这里有两种实用的方法可以实现:

首先先确认下原始数据:

import pandas as pd
dff = pd.DataFrame({"A":["foo", "foo", "foo", "bar"], "B":["A","A","B","A"], "C":[0,3,1,1]})

方法一:用groupby + idxmax()直接定位最大值行

这种方法效率很高,适合处理较大的数据集:

# 按A、B分组,找出每组中C列最大值对应的行索引
max_row_indices = dff.groupby(['A', 'B'])['C'].idxmax()
# 根据索引筛选出目标行,重置索引让结果更整洁
result = dff.loc[max_row_indices].reset_index(drop=True)

运行后得到的结果:

A  B  C
0  foo  A  3
1  foo  B  1
2  bar  A  1

方法二:先排序再去重,逻辑更直观

如果你觉得分组索引的方式有点绕,也可以用排序+去重的思路:

# 先按A、B升序,再按C降序排序,这样每组里C最大的行会排在最前面
sorted_df = dff.sort_values(['A', 'B', 'C'], ascending=[True, True, False])
# 按A、B去重,只保留每组的第一行(也就是C最大的行)
result = sorted_df.drop_duplicates(subset=['A', 'B'], keep='first').reset_index(drop=True)

这个方法得到的结果和上面完全一致,逻辑更容易理解。

小说明

注意你提到的期望输出里foo B对应的C是3,这和原始数据里的数值不符哦~原始数据中foo B的C值只有1,所以正确的结果里这一行的C应该是1。如果是输入数据写错了,调整数据后这两种方法依然适用!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:41:48