Combinar dos columnas con el mismo nombre en un dataframe.
Tengo un dataframe que se ve así:
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
Quiero unir los dos diferentes b columnas juntos, como esto:
a b c
0 1 1 0
1 0 1 1
2 1 0 1
Entiendo que podría usar | (OR) en un contexto de bits para combinarlos, por ejemplo con a y c:
python
df[‘a’] | df[‘c’]
0 1
1 1
2 1
dtype: int64
Pero tengo problemas para seleccionar las dos columnas b individuales, debido a esto:
>>> 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
davy.ai
¿Cómo puedo seleccionar las dos columnas
b
para fusionarlas juntas?Puede seleccionar las dos columnas
b
utilizando el métodoloc
. Este método le permite seleccionar columnas por sus etiquetas. Por ejemplo, puede usar el siguiente código para seleccionar las dos columnasb
:python
df.loc[:, ['b', 'b1']]
Esto devolverá el siguiente marco de datos:
b b1
0 0 1
1 1 0
2 0 0
Luego puede usar el operador
|
para fusionar las dos columnas juntas, así:python
df.loc[:, ['b', 'b1']].apply(lambda x: x['b'] | x['b1'], axis=1)
Esto devolverá la siguiente serie:
0 1
1 1
2 0
dtype: int64
Luego puede asignar esta serie a la columna
b
en el marco de datos original, así:python
df['b'] = df.loc[:, ['b', 'b1']].apply(lambda x: x['b'] | x['b1'], axis=1)
Este le dará el resultado deseado:
a b c
0 1 1 0
1 0 1 1
2 1 0 1