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.

¿Cómo se puede agregar datos nuevos y ya existentes provenientes de múltiples dataframes en un único dataframe?

Digamos que tengo un main df1:

Nombre: ID ID2 puntuación
Michael 1 01 100
Robert 12 012 80
William 123 65
Jul 01234 87

y luego quiero agregar df2:

Nombre: ID ID2 puntuación
Jul 1234 01234 87
William 123 0123 80
Steven 12345 012345 99

Entonces, en el caso en que df1 sea mi dataframe main, quiero agregar los nuevos valores de df2 a df1. En el caso en que el valor de nombre en df1 sea nuevo, quiero que se agregue al final de df1. En el caso en que el valor de nombre ya exista en df1, quiero que la fila actual se sobrescriba con el/los nuevos valores de df2 y permanezca en la misma fila en la que estaba antes de agregar los valores de df2.

Entonces, mi final_df se vería así:

Nombre: ID ID2 puntuación
Michael 1 01 100
Robert 12 012 80
William 123 0123 80
Jul 1234 01234 87
Steven 12345 012345 99

He intentado:

pd.concat([df1, df2])

  • Pero esto funciona en el caso en que estamos agregando datos nuevos al dataframe. En el caso de agregar ‘Jul’ y ‘William’ de df2 a nuestro df1, quiero sobrescribir esencialmente los datos actuales que están en df1 para ‘Jul’ y ‘William’, ya que estos valores de nombre ya existen en nuestro df1

¿Hay alguna solución mejor? Gracias de antemano

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes lograr esto utilizando pd.concat() y df.drop_duplicates() juntos. Aquí te explico cómo:

    merged_df = pd.concat([df1, df2])
    final_df = merged_df.drop_duplicates(subset=['Name'], keep='last')
    

    La función pd.concat() concatenará df1 y df2, lo que resultará en el siguiente dataframe:

    Name: ID ID2 score
    Michael 1 01 100
    Robert 12 012 80
    William 123 65
    Jul 01234 87
    Jul 1234 01234 87
    William 123 0123 80
    Steven 12345 012345 99

    Luego, df.drop_duplicates() elimina las filas duplicadas basándose en la columna Name y conserva la última ocurrencia, lo que resulta en el siguiente dataframe final:

    Name: ID ID2 score
    Michael 1 01 100
    Robert 12 012 80
    William 123 0123 80
    Jul 1234 01234 87
    Steven 12345 012345 99

    Esto te proporciona la salida deseada donde las filas existentes se sobrescriben con nuevos valores y las filas nuevas se agregan al final del dataframe.

Comments are closed.