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

如何筛选DataFrame:保留指定分组下value列最大值的记录

Pandas 按指定字段分组保留value最大值记录

给定如下DataFrame,需筛选出q2、id_q、check_id取值相同的记录组,仅保留每组中value列值最大的记录:

输入DataFrame

q1q2id_qcheck_idvalue
sdfsdfdfsdfsdf101090
hdfhhddfsdfsdf101080

期望输出

q1q2id_qcheck_idvalue
sdfsdfdfsdfsdf101090

解决方法

方法1:groupby + idxmax

通过分组获取每组value最大值的索引,再提取对应行,适合大数据量场景,效率较高:

import pandas as pd

# 构造输入数据
df = pd.DataFrame({
    'q1': ['sdfsdf', 'hdfhhd'],
    'q2': ['dfsdfsdf', 'dfsdfsdf'],
    'id_q': [10, 10],
    'check_id': [10, 10],
    'value': [90, 80]
})

# 分组取value最大的行
result = df.loc[df.groupby(['q2', 'id_q', 'check_id'])['value'].idxmax()]
print(result)

方法2:sort_values + drop_duplicates

先按value降序排序,再按指定字段去重(保留第一条即最大值记录),逻辑更直观:

import pandas as pd

df = pd.DataFrame({
    'q1': ['sdfsdf', 'hdfhhd'],
    'q2': ['dfsdfsdf', 'dfsdfsdf'],
    'id_q': [10, 10],
    'check_id': [10, 10],
    'value': [90, 80]
})

# 排序后去重
result = df.sort_values('value', ascending=False)\
           .drop_duplicates(subset=['q2', 'id_q', 'check_id'], keep='first')\
           .reset_index(drop=True)  # 重置索引可选
print(result)

内容的提问来源于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 23:40:27