Fusionar dos dataframes en base a las filas.
Sé que hay muchos recursos sobre cómo combinar dos df de Pandas, pero estoy intentando combinar un df basado en las IDs del segundo, pero necesito crear nuevas columnas a partir de las filas del segundo df. Es un poco confuso, pero aquí tengo un ejemplo que podría aclarar lo que estoy intentando hacer.
Lo que tengo:
dfa = pd.DataFrame({"ID": ["1", "2", "3"],"Color":["Red", "White", "Blue"],"Length":["16", "14.97", "22.75"]})
dfb = pd.DataFrame({"ID": ["1", "1", "2","3"],"Col1":["Color", "Width", "Length","Color"],"Value":["Blue", "14.97", "22.75","Green"]})
Lo que quiero:
dfc = pd.DataFrame({"ID": ["1", "2", "3"],"Color":["Blue", "White", "Green"],"Length":["16", "14.97", "22.75"],"c:Color":["Blue","NaN","Green"],"c:Width":["14.97","NaN","NaN"],"c:Length":["NaN","22.75","NaN"]})
¡Cualquier ayuda sería apreciada!
davy.ai
Para lograr esto, puedes utilizar la función
merge
en Pandas para unir los dos dataframes en la columna “ID” y luego pivotar el dataframe resultante para crear nuevas columnas a partir de las columnas “Col1” y “Value” endfb
.Aquí está el código para lograr esto:
Esto resultará en un nuevo dataframe
df_final
con las columnas deseadas:Explicación del código:
pd.merge(dfa, dfb, on='ID')
une los dos dataframes en la columna “ID”, resultando en un nuevo dataframe con todas las columnas de ambos dataframes.df_merged.pivot(index='ID', columns='Col1', values='Value').add_prefix('c:')
pivotea el dataframe resultante para crear nuevas columnas utilizando la columna “Col1” como nombres de las nuevas columnas y la columna “Value” como los valores. Las columnas resultantes tienen el prefijo ‘c:’ para distinguirlas de las columnas originales.pd.concat([dfa.set_index('ID'), df_pivoted], axis=1).reset_index()
agrega las columnas pivoteadas de vuelta al dataframe original, resultando en el dataframe final con las columnas deseadas.