Comment effectuer une anti-jointure dans Pandas
Un anti-jointure vous permet de renvoyer toutes les lignes d’un ensemble de données qui n’ont pas de valeurs correspondantes dans un autre ensemble de données.
Vous pouvez utiliser la syntaxe suivante pour effectuer une anti-jointure entre deux DataFrames pandas :
outer = df1.merge(df2, how='outer', indicator=True) anti_join = outer[(outer._merge=='left_only')].drop('_merge', axis=1)
L’exemple suivant montre comment utiliser cette syntaxe dans la pratique.
Exemple : effectuer une anti-jointure dans Pandas
Supposons que nous ayons les deux DataFrames pandas suivants :
import pandas as pd
#create first DataFrame
df1 = pd.DataFrame({'team': ['A', 'B', 'C', 'D', 'E'],
'points': [18, 22, 19, 14, 30]})
print(df1)
team points
0 A 18
1 B 22
2 C 19
3 D 14
4 E 30
#create second DataFrame
df2 = pd.DataFrame({'team': ['A', 'B', 'C', 'F', 'G'],
'points': [18, 22, 19, 22, 29]})
print(df2)
team points
0 A 18
1 B 22
2 C 19
3 F 22
4 G 29
Nous pouvons utiliser le code suivant pour renvoyer toutes les lignes du premier DataFrame qui n’ont pas d’équipe correspondante dans le deuxième DataFrame :
#perform outer join outer = df1.merge(df2, how='outer', indicator=True) #perform anti-join anti_join = outer[(outer._merge=='left_only')].drop('_merge', axis=1) #view results print(anti_join) team points 3 D 14 4 E 30
Nous pouvons voir qu’il y a exactement deux équipes du premier DataFrame qui n’ont pas de nom d’équipe correspondant dans le deuxième DataFrame.
L’anti-jointure a fonctionné comme prévu.
Le résultat final est un DataFrame qui contient uniquement les lignes où le nom de l’équipe appartient au premier DataFrame mais pas au deuxième DataFrame.
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans les pandas :
Comment faire une jointure interne chez Pandas
Comment faire une jointure à gauche dans Pandas
Comment faire une jointure croisée dans Pandas