如何保留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
相关产品推荐
相关产品推荐

