Pandas : vérifiez si la ligne d’un DataFrame existe dans un autre



Vous pouvez utiliser la syntaxe suivante pour ajouter une nouvelle colonne à un DataFrame pandas qui indique si chaque ligne existe dans un autre DataFrame :

#merge two DataFrames on specific columns
all_df = pd.merge(df1, df2, on=['column1', 'column2'], how='left', indicator='exists')

#drop unwanted columns
all_df = all_df.drop('column3', axis=1)

#add column that shows if each row in one DataFrame exists in another
all_df['exists'] = np.where(all_df.exists == 'both', True, False)

L’exemple suivant montre comment utiliser cette syntaxe dans la pratique.

Exemple : vérifier si une ligne dans un DataFrame Pandas existe dans un autre

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' : [12, 15, 22, 29, 24]}) 

print(df1)

  team  points
0    A      12
1    B      15
2    C      22
3    D      29
4    E      24

#create second DataFrame
df2 = pd.DataFrame({'team' : ['A', 'D', 'F', 'G', 'H'],
                    'points' : [12, 29, 15, 19, 10],
                    'assists' : [4, 7, 7, 10, 12]})

print(df2)

  team  points  assists
0    A      12        4
1    D      29        7
2    F      15        7
3    G      19       10
4    H      10       12

Nous pouvons utiliser la syntaxe suivante pour ajouter une colonne appelée exist au premier DataFrame qui indique si chaque valeur de la colonne équipe et points de chaque ligne existe dans le deuxième DataFrame :

import numpy as np

#merge two dataFrames and add indicator column
all_df = pd.merge(df1, df2, on=['team', 'points'], how='left', indicator='exists')

#drop assists columns
all_df = all_df.drop('assists', axis=1)

#add column to show if each row in first DataFrame exists in second
all_df['exists'] = np.where(all_df.exists == 'both', True, False)

#view updated DataFrame
print (all_df)

  team  points  exists
0    A      12    True
1    B      15   False
2    C      22   False
3    D      29    True
4    E      24   False

La nouvelle colonne existe indique si chaque valeur de la colonne équipe et points de chaque ligne existe dans le deuxième DataFrame.

À partir du résultat, nous pouvons voir :

  • Une valeur d’équipe de A et une valeur de points de 12 existent dans le deuxième DataFrame.
  • Une valeur d’équipe de B et une valeur de points de 15 n’existent pas dans le deuxième DataFrame.
  • Une valeur d’équipe de C et une valeur de points de 22 n’existent pas dans le deuxième DataFrame.
  • Une valeur d’équipe de D et une valeur de points de 29 existent dans le deuxième DataFrame.
  • Une valeur d’équipe de E et une valeur de points de 24 n’existent pas dans le deuxième DataFrame.

Notez également que vous pouvez spécifier des valeurs autres que True et False dans la colonne existe en modifiant les valeurs dans la fonction NumPy Where() .

Par exemple, vous pouvez utiliser à la place « existe » et « n’existe pas » comme suit :

#add column to show if each row in first DataFrame exists in second
all_df['exists'] = np.where(all_df.exists == 'both', 'exists', 'not exists')

#view updated DataFrame
print (all_df)

  team  points      exists
0    A      12      exists
1    B      15  not exists
2    C      22  not exists
3    D      29      exists
4    E      24  not exists

Notez que les valeurs de la colonne existe ont été modifiées.

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans les pandas :

Pandas : ajouter une colonne d’un DataFrame à un autre
Pandas : obtenez des lignes qui ne se trouvent pas dans un autre DataFrame
Pandas : comment vérifier si plusieurs colonnes sont égales

Ajouter un commentaire

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