合并数据框中两个同名的列

Merging two identically-named columns in a dataframe

我有一个如下所示的数据框:

df = pd.DataFrame({'a':[1,0,1],'b':[0,1,0],'b1':[1,0,0],'c':[0,1,1]})
df.columns = ['a','b','b','c']

>>> df
   a  b  b  c
0  1  0  1  0
1  0  1  0  1
2  1  0  0  1

我想将这两个不同的 b 列合并在一起,如下所示:

   a  b  c
0  1  1  0
1  0  1  1
2  1  0  1

我知道我可以在按位上下文中使用 | (OR) 来组合它们,例如ac:

>>> df['a'] | df['c']
0    1
1    1
2    1
dtype: int64

但是我在选择两个单独的 b 列时遇到了问题,因为:

>>> df['b']
   b  b
0  0  1
1  1  0
2  0  0

>>> df['b']['b']
   b  b
0  0  1
1  1  0
2  0  0

>>> df['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']['b']
   b  b
0  0  1
1  1  0
2  0  0

试试 sumclip:

df["b"] = df["b"].sum(axis=1).clip(0, 1)

#remove duplicate column
df = df.loc[:, ~df.columns.duplicated()]

除了建议的答案 ,您还可以按索引访问列,如下所示:

df.iloc[:, 1] | df.iloc[:, 2]

假设您有多组重复列,您可以使用 DataFrame.groupby.

的相同逻辑应用于每个组
# group the columns (axis=1) by their labels (level=0) and apply the logic to each group
df = df.groupby(level=0, axis=1).sum().clip(0, 1)