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

如何保留DataFrame中指定列值相同且value最大的记录

按分组保留value最大值的DataFrame筛选方案

需求:筛选出q2、id_q、check_id列值相同的记录,仅保留每组中value值最大的条目。

输入DataFrame

q1                   q2              id_q         check_id         value
sdfsdf             dfsdfsdf            10              10             90
hdfhhd             dfsdfsdf            10              10             80

期望输出

q1                   q2              id_q         check_id         value
sdfsdf             dfsdfsdf            10              10             90

问题分析

之前尝试过以下写法:

df = df.sort_values(by=['q2', 'value']).drop_duplicates(subset=['q2', 'id_q', 'check_id'], keep='last')

但该方法存在隐患——它仅保留排序后的最后一条记录,若value按升序排序,确实能拿到最大值,但如果排序逻辑调整(比如改为降序),结果就会出错,且写法逻辑不够直接。

可靠解决方案

方法一:groupby + idxmax(推荐)

直接通过分组获取每组value最大值对应的行索引,再筛选行,逻辑精准清晰:

# 获取每组中value最大的行的索引
max_row_indices = df.groupby(['q2', 'id_q', 'check_id'])['value'].idxmax()
# 根据索引筛选目标行
df = df.loc[max_row_indices]

方法二:排序去重(优化版)

如果偏好排序去重的思路,需明确将value设为降序排列,确保每组的第一条就是最大值,再保留第一条:

df = df.sort_values(
    by=['q2', 'id_q', 'check_id', 'value'],
    ascending=[True, True, True, False]
).drop_duplicates(subset=['q2', 'id_q', 'check_id'], keep='first')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:15:29