Merge Dataframe

abril 17, 2015

Merge dataframe

Merge de dataframes

La función merge es usada para combinar dataframe con una o mas columnas en común.

Merge de dos dataframe por una columna

In [1]:
import pandas as pd

Se construyen dos dataframe a partir de una columna en común

In [2]:
df_1 = pd.DataFrame([[1,2,3], [2,5,4],[4,2,3]], columns=['a', 'b', 'c'])
df_2 = pd.DataFrame([[3,5,1], [1,1,4],[2,6,3]], columns=['a', 'd', 'e'])

Ahora, se combinan a partir de esta columna

In [3]:
df_merge = pd.merge(df_1, df_2, on='a')
print df_merge
a  b  c  d  e
0  1  2  3  1  4
1  2  5  4  6  3

[2 rows x 5 columns]

Este merge toma solo las filas cuyos valores de a se encuentran en ambos dataframe, si se quiere considerar todos los valores de la columna en común se usa el argumento how = 'outer'. Los valores de las columas cuyo dato no es común en a se llena con NaN.

In [4]:
df_merge = pd.merge(df_1, df_2, on='a', how='outer')
print df_merge
a   b   c   d   e
0  1   2   3   1   4
1  2   5   4   6   3
2  4   2   3 NaN NaN
3  3 NaN NaN   5   1

[4 rows x 5 columns]

Para tomar todos los valores de la columna en común de uno de los dataframe, se usan en el argumento how los métodos 'left' o 'right', para tomar todos los valores del primer o del segundo dataframe respectivamente.

In [5]:
df_merge = pd.merge(df_1, df_2, on='a', how='left')
print df_merge
a  b  c   d   e
0  1  2  3   1   4
1  2  5  4   6   3
2  4  2  3 NaN NaN

[3 rows x 5 columns]
In [6]:
df_merge = pd.merge(df_1, df_2, on='a', how='right')
print df_merge
a   b   c  d  e
0  1   2   3  1  4
1  2   5   4  6  3
2  3 NaN NaN  5  1

[3 rows x 5 columns]

Merge de dos dataframe que tienen varias columnas en común

Al realizar un merge de dos dataframe con varias columnas en común, que no son usadas como columna de merge, estas se renombran automáticamente, de forma que en el dataframe resultante no hay columnas con igual nombre.

In [7]:
df_1 = pd.DataFrame([[1,2,3], [2,5,4],[4,2,3]], columns=['a', 'b', 'c'])
df_2 = pd.DataFrame([[3,5,1], [1,1,4],[2,6,3]], columns=['a', 'd', 'c'])
In [8]:
df_merge = pd.merge(df_1, df_2, on='c')
print df_merge
a_x  b  c  a_y  d
0    1  2  3    2  6
1    4  2  3    2  6
2    2  5  4    1  1

[3 rows x 5 columns]

Orden dataframe

El atributo sort organiza el dataframe de forma lexicográfica.

In [9]:
df_merge = pd.merge(df_1, df_2, on='c', sort=True, how='outer')
print df_merge
a_x   b  c  a_y  d
0  NaN NaN  1    3  5
1    1   2  3    2  6
2    4   2  3    2  6
3    2   5  4    1  1

[4 rows x 5 columns]

Merge de dos dataframe por dos columnas

Para realizar un merge con dos columnas basta agregar en el argumento on una lista con los nombres de las columnas en común.

In [10]:
df_1 = pd.DataFrame([[1,2,5], [2,5,4],[4,2,3]], columns=['a', 'b', 'c'])
print df_1
a  b  c
0  1  2  5
1  2  5  4
2  4  2  3

[3 rows x 3 columns]
In [11]:
df_2 = pd.DataFrame([[3,5,1], [2,1,4],[2,6,3]], columns=['a', 'd', 'c'])
print df_2
a  d  c
0  3  5  1
1  2  1  4
2  2  6  3

[3 rows x 3 columns]
In [12]:
df_merge = pd.merge(df_1, df_2, on=['c', 'a'])
print df_merge
a  b  c  d
0  2  5  4  1

[1 rows x 4 columns]
In [13]:
df_merge = pd.merge(df_1, df_2, on=['c', 'a'], how='outer')
print df_merge
a   b  c   d
0  1   2  5 NaN
1  2   5  4   1
2  4   2  3 NaN
3  3 NaN  1   5
4  2 NaN  3   6

[5 rows x 4 columns]

You Might Also Like

0 comments

Apoyado por: