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

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__

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:39:01