合并数据框中两个同名的列
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) 来组合它们,例如a
和 c
:
>>> 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
试试 sum
和 clip
:
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)
我有一个如下所示的数据框:
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) 来组合它们,例如a
和 c
:
>>> 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
试试 sum
和 clip
:
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)