如何筛选DataFrame:保留指定分组下value列最大值的记录
Pandas 按指定字段分组保留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 |
解决方法
方法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
相关产品推荐
相关产品推荐

