INNER | ( LEFT | RIGHT | FULL ) OUTER ) JOIN con pandas?merge ? join ? concat ? update ? ¿Quién? ¿Qué? ¡¿Por qué?!... y más. He visto estas preguntas recurrentes sobre varias facetas de la funcionalidad de fusión de pandas. La mayor parte de la información sobre la fusión y sus diversos casos de uso hoy en día está fragmentada en docenas de publicaciones mal redactadas e inescrutables. El objetivo aquí es recopilar algunos de los puntos más importantes para la posteridad.
Esta sesión de preguntas y respuestas está destinada a ser la próxima entrega de una serie de útiles guías de usuario sobre modismos comunes de pandas (consulte esta publicación sobre pivoting y esta publicación sobre concatenación , que abordaré más adelante).
Tenga en cuenta que esta publicación no pretende ser un reemplazo de la documentación , ¡así que léala también! Algunos de los ejemplos están tomados de allí.
Para facilitar el acceso.
Una vista visual complementaria de pd.concat([df0, df1], kwargs) . Tenga en cuenta que el significado de kwarg axis=0 o axis=1 no es tan intuitivo como df.mean() o df.apply(func)
En esta respuesta, consideraré ejemplos prácticos.
El primero, es de pandas.concat .
El segundo, de fusionar dataframes del índice de uno y la columna de otro.
1 . pandas.concat
Considerando los siguientes DataFrames con los mismos nombres de columna:
Preco2018 con talla (8784,5)
Preco 2019 con talla (8760, 5)
Que tienen los mismos nombres de columna.
Puedes combinarlos usando pandas.concat , simplemente
import pandas as pd frames = [Preco2018, Preco2019] df_merged = pd.concat(frames)Lo que da como resultado un DataFrame con el siguiente tamaño (17544, 5)
Si quieres visualizar, termina funcionando así.
( Fuente )
2 . Combinar por columna e índice
En esta parte, consideraré un caso específico: si uno quiere fusionar el índice de un marco de datos y la columna de otro marco de datos.
Digamos que uno tiene el marco de datos Geo con 54 columnas, siendo una de las columnas los Data Fecha, que es de tipo datetime64[ns] .
Y el marco de datos Price que tiene una columna con el precio y el índice corresponde a las fechas
En este caso específico, para fusionarlos, uno usa pd.merge
merged = pd.merge(Price, Geo, left_index=True, right_on='Data')Lo que da como resultado el siguiente marco de datos
Estas animaciones podrían ser mejores para explicarte visualmente. Créditos: Garrick Aden-Buie tidyexplain repo