Fusionar Pandas Dataframe en el índice
-
Usa
merge()
para combinar dos Pandas DataFrames en el índice -
Usa
join()
para combinar dos Pandas DataFrame en el índice
En el mundo de la ciencia de los Datos y el aprendizaje automático, es esencial ser fluido en las operaciones para organizar, mantener y limpiar los datos para su posterior análisis. La fusión de dos DataFrames es un ejemplo de una de esas operaciones. Resulta que es fácil combinar dos DataFrames utilizando la biblioteca de Pandas en Python.
Pandas nos proporciona dos funciones útiles, merge()
y join()
para combinar dos DataFrames. Ambos métodos son muy similares, pero merge()
se considera más versátil y flexible. También proporciona muchos parámetros para alterar el comportamiento del DataFrame final. join()
combina los dos DataFrames en sus índices, mientras que merge()
nos permite especificar las columnas que pueden actuar como clave para fusionar dos DataFrames.
Un parámetro común de ambas funciones con el que uno debería estar familiarizado es how
, que define el tipo de unión. Por defecto, el parámetro how
es inner
para merge()
y left
para join()
, pero para ambos puede cambiarse a left
, right
, inner
, y outter
. Es esencial saber la diferencia entre todos ellos.
Al combinar dos Pandas DataFrame, asumimos que uno es el DataFrame izquierdo y el otro es el DataFrame derecho. Tanto mergge()
como join()
coinciden con los registros de las columnas clave. La unión inner
devuelve un DataFrame de registros que coinciden en ambos DataFrames. La unión outer
produce un DataFrame fusionado con todos los elementos de ambos DataFrames, rellenando NaN para los valores que faltan en ambos lados. El empalme left
contiene todos los elementos del DataFrame izquierdo pero sólo los registros coincidentes del DataFrame derecho. Lo opuesto a left
es right
, que tiene todos los elementos del DataFrame derecho y sólo los registros coincidentes del DataFrame izquierdo. Todo esto será más claro en el código de ejemplo en las próximas secciones donde combinaremos los DataFrames en el código de abajo:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
print(df1)
print(df2)
Resultado:
C1
1 a
2 b
4 d
5 e
7 h
C2
1 AA
2 BB
3 CC
5 EE
6 FF
Usa merge()
para combinar dos Pandas DataFrames en el índice
Cuando se fusionan dos DataFrames en el índice, el valor de los parámetros left_index
y right_index
de la función merge()
debe ser True
. El siguiente ejemplo de código combinará dos DataFrames con inner
como tipo de combinación:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_inner = df1.merge(df2, how="inner", left_index=True, right_index=True)
print(df_inner)
Resultado:
C1 C2
1 a AA
2 b BB
5 e EE
El siguiente código combinará los DataFrames con el tipo de unión como outer
:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_outer = df1.merge(df2, how="outer", left_index=True, right_index=True)
print(df_outer)
Resultado:
C1 C2
1 a AA
2 b BB
3 NaN CC
4 d NaN
5 e EE
6 NaN FF
7 h NaN
Como puedes ver, el DataFrame fusionado con el tipo join como inner
sólo tiene registros coincidentes de ambos DataFrames, mientras que el que tiene el tipo join outer
tiene todos los elementos presentes en ellos, llenando los registros que faltan con NaN
. Ahora usando left
join:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_left = df1.merge(df2, how="left", left_index=True, right_index=True)
print(df_left)
Resultado:
C1 C2
1 a AA
2 b BB
4 d NaN
5 e EE
7 h NaN
El DataFrame fusionado anterior tiene todos los elementos del DataFrame izquierdo, y sólo los registros coincidentes del DataFrame derecho. Su opuesto exacto es la unión right
, como se muestra abajo:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_right = df1.merge(df2, how="right", left_index=True, right_index=True)
print(df_right)
Resultado:
C1 C2
1 a AA
2 b BB
3 NaN CC
5 e EE
6 NaN FF
Usa join()
para combinar dos Pandas DataFrame en el índice
El método join()
combina los dos DataFrames en base a sus índices, y por defecto, el tipo join()
es left
. Siempre utiliza el índice del DataFrame derecho, pero podemos mencionar la clave del DataFrame izquierdo. Podemos especificar los tipos de join para la función join()
igual que mencionamos para la función merge()
.
El siguiente ejemplo muestra el DataFrame fusionado con el tipo de unión outer
:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_outer = df1.join(df2, how="outer")
print(df_outer)
Resultado:
C1 C2
1 a AA
2 b BB
3 NaN CC
4 d NaN
5 e EE
6 NaN FF
7 h NaN
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedInArtículo relacionado - Pandas DataFrame
- Cómo obtener las cabeceras de columna de Pandas DataFrame como una lista
- Cómo borrar la columna de Pandas DataFrame
- Cómo convertir la columna del DataFrame a Datetime en Pandas
- Cómo convertir un float en un entero en Pandas DataFrame
- Cómo clasificar Pandas DataFrame por los valores de una columna
- Cómo obtener el agregado de Pandas grupo por y suma