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

如何在Pandas DataFrame中合并多列独热编码并去重?

Pandas按ID合并行并保留非零值的实现方案

需求说明

原始DataFrame:

ID  A B C
1   1 0 0
1   0 1 0
2   1 0 0

目标是按ID分组,将同一ID下的行合并,保留各列出现过的非零值(即把同一ID下的0/1列合并为1如果有过1),得到:

ID  A B C
1   1 1 0
2   1 0 0

解决方案

方法1:使用groupby + max()

这是最直接的方案,因为同一ID下的列值为0或1,取最大值即可保留出现过的1:

import pandas as pd

# 构造原始数据
df = pd.DataFrame({
    'ID': [1, 1, 2],
    'A': [1, 0, 1],
    'B': [0, 1, 0],
    'C': [0, 0, 0]
})

# 按ID分组合并,as_index=False让ID保持为列而非索引
merged_df = df.groupby('ID', as_index=False).max()

print(merged_df)

输出结果:

ID  A  B  C
0   1  1  1  0
1   2  1  0  0

方法2:使用groupby + any()转整数

如果需要明确判断列中是否存在非零值,可通过any()生成布尔值后转为整数:

merged_df = df.groupby('ID', as_index=False).agg(lambda x: x.any().astype(int))

该方法逻辑更直观,any()会检查分组内列是否有非零值,astype(int)将True转为1,False转为0,结果和方法1完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:41:03