Comment fusionner des DataFrames Pandas sur plusieurs colonnes



Souvent, vous souhaiterez peut-être fusionner deux DataFrames pandas sur plusieurs colonnes. Heureusement, cela est facile à faire en utilisant la fonction pandas merge() , qui utilise la syntaxe suivante :

pd.merge(df1, df2, left_on=['col1','col2'], right_on = ['col1','col2'])

Ce tutoriel explique comment utiliser cette fonction en pratique.

Exemple 1 : Fusionner plusieurs colonnes avec des noms différents

Supposons que nous ayons les deux DataFrames pandas suivants :

import pandas as pd

#create and view first DataFrame
df1 = pd.DataFrame({'a1': [0, 0, 1, 1, 2],
                   'b': [0, 0, 1, 1, 1],
                   'c': [11, 8, 10, 6, 6]})

print(df1)

   a1  b   c
0   0  0  11
1   0  0   8
2   1  1  10
3   1  1   6
4   2  1   6

#create and view second DataFrame 
df2 = pd.DataFrame({'a2': [0, 1, 1, 1, 3],
                   'b': [0, 0, 0, 1, 1],
                   'd': [22, 24, 25, 33, 37]})

print(df2)

   a2  b   d
0   0  0  22
1   1  0  24
2   1  0  25
3   1  1  33
4   3  1  37

Le code suivant montre comment effectuer une jointure gauche en utilisant plusieurs colonnes des deux DataFrames :

pd.merge(df1, df2, how='left', left_on=['a1', 'b'], right_on = ['a2','b'])


        a1	b	c	a2	d
0	0	0	11	0.0	22.0
1	0	0	8	0.0	22.0
2	1	1	10	1.0	33.0
3	1	1	6	1.0	33.0
4	2	1	6	NaN	NaN

Exemple 2 : fusionner plusieurs colonnes portant les mêmes noms

Supposons que nous ayons les deux DataFrames pandas suivants avec les mêmes noms de colonnes :

import pandas as pd

#create DataFrames
df1 = pd.DataFrame({'a': [0, 0, 1, 1, 2],
                   'b': [0, 0, 1, 1, 1],
                   'c': [11, 8, 10, 6, 6]})

df2 = pd.DataFrame({'a': [0, 1, 1, 1, 3],
                   'b': [0, 0, 0, 1, 1],
                   'd': [22, 24, 25, 33, 37]})

Dans ce cas, nous pouvons simplifier l’utilisation de on = [‘a’, ‘b’] puisque les noms de colonnes sont les mêmes dans les deux DataFrames :

pd.merge(df1, df2, how='left', on=['a', 'b'])

	a	b	c	d
0	0	0	11	22.0
1	0	0	8	22.0
2	1	1	10	33.0
3	1	1	6	33.0
4	2	1	6	NaN

Ressources additionnelles

Comment fusionner deux DataFrames Pandas sur l’index
Comment empiler plusieurs DataFrames Pandas

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *