Tengo un marco de datos 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 abbc 0 1 0 1 0 1 0 1 0 1 2 1 0 0 1 Quiero fusionar esas dos columnas b diferentes juntas, así:
abc 0 1 1 0 1 0 1 1 2 1 0 1 Entiendo que podría usar | (O) en un contexto bit a bit para combinarlos, por ejemplo, con a y c :
>>> 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'] bb 0 0 1 1 1 0 2 0 0 >>> df['b']['b'] bb 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'] bb 0 0 1 1 1 0 2 0 0Prueba con sum y clip :
df["b"] = df["b"].sum(axis=1).clip(0, 1) #remove duplicate column df = df.loc[:, ~df.columns.duplicated()]Además de la respuesta sugerida por not_speshal , también puede acceder a las columnas por índice de la siguiente manera:
df.iloc[:, 1] | df.iloc[:, 2]Suponiendo que tiene varios grupos de columnas repetidas, puede aplicar la misma lógica de la solución de not_speshal a cada grupo usando 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)