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

如何在Python Pandas中按ID聚合DataFrame并按规则处理列值去重?

Python Pandas 按指定规则对DataFrame去重

问题背景

现有如下Pandas DataFrame:

ID  | COL1| COL2 | COL3
----------|------|------
123 | XXX | 0    | 1
123 | XXX | 1    | 1
444 | ABC | 1    | 1
444 | ABC | 1    | 1 
555 | PPP | 0    | 0

需按以下规则完成去重:

  • 每个ID分组内,若COL2或COL3中存在至少一个1,则最终这两列的值为1(无需考虑0的出现次数);
  • 保留DataFrame中的所有其他列;
  • 每个ID对应的COL1值唯一,最终结果中同一ID仅保留一行对应COL1的记录。

期望输出结果:

ID  | COL1| COL2 | COL3
----|-----|------|-----
123 | XXX | 1    | 1
444 | ABC | 1    | 1
555 | PPP | 0    | 0

实现方案

通过groupby分组结合聚合函数即可实现需求,具体代码如下:

示例代码

import pandas as pd

# 构造原始数据(包含额外列示例)
df = pd.DataFrame({
    'ID': [123, 123, 444, 444, 555],
    'COL1': ['XXX', 'XXX', 'ABC', 'ABC', 'PPP'],
    'COL2': [0, 1, 1, 1, 0],
    'COL3': [1, 1, 1, 1, 0],
    'OTHER_COL1': ['A', 'A', 'B', 'B', 'C'],
    'OTHER_COL2': [10, 10, 20, 20, 30]
})

# 定义聚合规则:COL2、COL3取最大值(只要有1就返回1)
agg_spec = {'COL2': 'max', 'COL3': 'max'}

# 为其他需要保留的列添加聚合规则(这里取分组内第一个值,可根据实际调整)
for col in df.columns:
    if col not in ['ID', 'COL1', 'COL2', 'COL3']:
        agg_spec[col] = 'first'

# 分组聚合得到最终结果
result = df.groupby(['ID', 'COL1'], as_index=False).agg(agg_spec)

print(result)

关键逻辑说明

  • 分组键选择:使用['ID', 'COL1']作为分组键,确保同一ID下的COL1值唯一,满足需求3;
  • COL2/COL3聚合:max()函数刚好匹配需求1——只要分组内存在1,最大值就是1;全0则返回0;
  • 其他列处理:若同一分组内其他列的值一致,用first()/last()均可;若存在不同值,可根据业务需求替换为mean()(数值列)、join()(文本列)或自定义聚合函数。

内容的提问来源于stack exchange,提问作者unbik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:10:31