Pandas按ID分组多条件筛选:优先HA1类型再取最大Num值行
实现方案
核心思路
- 新增临时排序字段,标记当前行是否为HA1类型,HA1类型标记为1,其他为0,保证同组内HA1行优先级高于非HA1行
- 按ID分组后,每组内先按临时排序字段降序排列,再按Num降序排列
- 取每组的第一行即为符合要求的结果
代码实现
首先构造示例数据集:
import pandas as pd data = { 'ID': [123, 123, 123, 456, 456], 'Data': ['What', 'I', 'What', 'I', 'Gotta'], 'AddType': ['HA1', 'HA1', 'OT1', 'OT2', 'OT2'], 'Num': [1, 2, 1, 1, 2] } df = pd.DataFrame(data)
核心处理逻辑:
# 新增排序优先级字段 df['is_ha1'] = (df['AddType'] == 'HA1').astype(int) # 排序后分组取首行,删除临时字段 result = df.sort_values(['is_ha1', 'Num'], ascending=False)\ .groupby('ID', as_index=False)\ .first()\ .drop('is_ha1', axis=1) print(result)
如果使用pandas 1.1.0及以上版本,也可以用key参数省略临时字段的创建:
result = df.sort_values( by=['AddType', 'Num'], ascending=False, key=lambda col: col == 'HA1' if col.name == 'AddType' else col ).groupby('ID', as_index=False).first()
输出结果
ID Data AddType Num 0 123 I HA1 2 1 456 Gotta OT2 2
内容的提问来源于stack exchange,提问作者lte__
相关产品推荐
相关产品推荐

