如何在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
相关产品推荐
相关产品推荐

