es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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!

Tags:  , , ,

Answer

  1. Avatar for 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” en dfb.

    Aquí está el código para lograr esto:

    # Unir los dos dataframes en la columna "ID"
    df_merged = pd.merge(dfa, dfb, on='ID')
    
    # Pivotear el dataframe resultante para crear nuevas columnas
    df_pivoted = df_merged.pivot(index='ID', columns='Col1', values='Value').add_prefix('c:')
    
    # Agregar las columnas pivoteadas de vuelta al dataframe original
    df_final = pd.concat([dfa.set_index('ID'), df_pivoted], axis=1).reset_index()
    

    Esto resultará en un nuevo dataframe df_final con las columnas deseadas:

       ID  Color  Length c:Color c:Length c:Width
    0  1   Blue   16     Blue    NaN      14.97
    1  2   White  14.97  NaN     22.75    NaN
    2  3   Blue   22.75  Green   NaN      NaN
    

    Explicación del código:

    1. 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.
    2. 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.
    3. 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.

Comments are closed.