如何合并pandas DataFrame中两个列名相同的b列
解决方法
方法1:通用方案(适配任意数量重名b列)
对于多个重名的b列,直接选中所有b列后按行执行逻辑或运算,对于0/1值来说和按位或运算结果完全一致,不需要单独选中每一列:
# 所有重名b列按行求或,转为int匹配原数据类型 merged_b = df['b'].any(axis=1).astype(int) # 拼接非重名列与合并后的b列,调整列顺序 res = pd.concat([df.drop(columns='b'), merged_b.rename('b')], axis=1)[['a','b','c']]
输出结果:
a b c 0 1 1 0 1 0 1 1 2 1 0 1
方法2:按位置选中单列后合并
如果需要单独选中某一个重名b列,使用iloc按列的位置索引取值即可,示例里两个b列的位置索引分别是1和2:
# 按位置取两个b列 b_col1 = df.iloc[:, 1] b_col2 = df.iloc[:, 2] # 按位或合并 merged_b = b_col1 | b_col2 # 后续拼接逻辑同上 res = pd.concat([df.drop(columns='b'), merged_b.rename('b')], axis=1)[['a','b','c']]
补充说明
你尝试的df['b']['b']无法选中单列是pandas的正常逻辑:当你用列名索引重名列时,会返回所有匹配该名称的列组成的DataFrame,这个返回结果的列名依然全是b,所以重复用['b']索引永远会返回所有重名列,无法筛选出单列。
内容的提问来源于stack exchange,提问作者user17242583
相关产品推荐
相关产品推荐

