seleccionar - Fusione dos marcos de datos de pandas de Python de diferente longitud, pero mantenga todas las filas en el marco de datos de salida
seleccionar columnas de un dataframe pandas (3)
Parece que estás buscando algo así como unirte a la izquierda. Vea si este ejemplo ayuda: http://pandas.pydata.org/pandas-docs/stable/comparison_with_sql.html#left-outer-join
Básicamente puedes pasar un parámetro para merge()
llamado how=''left''
Esta pregunta ya tiene una respuesta aquí:
- Pandas Merging 101 1 respuesta
Tengo el siguiente problema: tengo dos marcos de datos de pandas de diferente longitud que contienen algunas filas y columnas que tienen valores comunes y algunos que son diferentes, como este:
df1: df2:
Column1 Column2 Column3 ColumnA ColumnB ColumnC
0 a x x 0 c y y
1 c x x 1 e z z
2 e x x 2 a s s
3 d x x 3 d f f
4 h x x
5 k x x
Lo que quiero hacer ahora es fusionar los dos marcos de datos para que si ColumnA y Column1 tienen el mismo valor, las filas de df2 se agreguen a la fila correspondiente en df1, de esta manera:
df1:
Column1 Column2 Column3 ColumnB ColumnC
0 a x x s s
1 c x x y y
2 e x x z z
3 d x x f f
4 h x x NaN NaN
5 k x x NaN NaN
Sé que la fusión es factible a través de
df1.merge(df2,left_on=''Column1'', right_on=''ColumnA'')
pero este comando elimina todas las filas que no son iguales en Column1 y ColumnA en ambos archivos. En lugar de eso, quiero mantener estas filas en df1 y simplemente asignarles NaN en las columnas donde otras filas tienen un valor de df2, como se muestra arriba. ¿Hay una manera suave de hacer esto en los pandas?
¡Gracias por adelantado!
Puede leer la documentación aquí: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html
Lo que estás buscando es un enlace a la izquierda. La opción predeterminada es una unión interna. Puedes cambiar este comportamiento pasando un argumento diferente:
df1.merge(df2,how=''left'', left_on=''Column1'', right_on=''ColumnA'')
Simplemente puede usar la combinación con el uso en y lista también
result = df1.merge(df2, on=[''Column1''])
Para más información siga el link