Comment comparer des colonnes dans différents blocs de données?


23

Je voudrais comparer une colonne d'un df avec d'autres df. Les colonnes sont des noms et des noms de famille. Je voudrais vérifier si une personne dans une trame de données se trouve dans une autre.


Pourriez-vous s'il vous plaît indiquer à quoi vous voulez que le résultat ressemble? Est-ce un df avec des noms apparaissant dans les deux dfs, et si vous avez également besoin d'autre chose comme le nombre ou la colonne correspondante dans df2, etc. Merci!
The Lyrist


Vous pouvez joindre en interne les deux blocs de données sur les colonnes qui vous intéressent et vérifier si le nombre de lignes dans le résultat est positif.
dsaxton

Pour info, la comparaison du prénom et du nom de famille sur n'importe quel ensemble de noms décemment gros finira par être douloureuse - beaucoup de gens ont le même nom!
Ken Syme

Réponses:


22

Si vous souhaitez vérifier des valeurs égales sur une certaine colonne, disons Nom, vous pouvez fusionner les deux Dataframes en une nouvelle:

mergedStuff = pd.merge(df1, df2, on=['Name'], how='inner')
mergedStuff.head()

Je pense que c'est plus efficace et plus rapide que wheresi vous avez un grand ensemble de données


1
Je pense que nous voulons utiliser une jointure intérieure ici, puis vérifier sa forme.
dsaxton

10
df1.where(df1.values==df2.values).notna()

Trueles entrées montrent des éléments communs. Cela révèle également la position des éléments communs, contrairement à la solution avec merge.


quelle est df.votre réponse? Il y a seulement df1et df2mais pasdf
LearneR

3

Comparaison de valeurs dans deux colonnes différentes

En utilisant set, obtenez des valeurs uniques dans chaque colonne. L'intersection de ces deux ensembles fournira les valeurs uniques dans les deux colonnes.

Exemple:

df1 = pd.DataFrame({'c1': [1, 4, 7], 'c2': [2, 5, 1], 'c3': [3, 1, 1]}) df2 = pd.DataFrame({'c4': [1, 4, 7], 'c2': [3, 5, 2], 'c3': [3, 7, 5]}) set(df1['c2']).intersection(set(df2['c2']))

Sortie: {2, 5}


Comparaison des noms de colonne de deux trames de données

Dans le cas où vous essayez de comparer les noms de colonnes de deux trames de données:

Si df1et df2sont les deux trames de données: set(df1.columns).intersection(set(df2.columns))

Cela fournira les noms de colonnes uniques qui sont contenus dans les deux cadres de données.

Exemple:

df1 = pd.DataFrame({'c1': [1, 4, 7], 'c2': [2, 5, 1], 'c3': [3, 1, 1]})
df2 = pd.DataFrame({'c4': [1, 4, 7], 'c2': [3, 5, 2], 'c3': [3, 7, 5]})

set(df1.columns).intersection(set(df2.columns))

Sortie: {'c2', 'c3'}


Je pense que la question est de comparer les valeurs dans deux colonnes différentes dans des cadres de données différents, car la personne interrogée veut vérifier si une personne dans un bloc de données se trouve dans un autre.
Divyanshu Shekhar

Merci, j'ai mal posé la question. J'ai mis à jour la réponse maintenant.
aathiraks

1

Vous pouvez vérifier le nombre exact de positions communes et différentes entre deux df en utilisant isin et value_counts ()

Comme ça:

df['your_column_name'].isin(df2['your_column_name']).value_counts()

Résultat:

exemple isin

Vrai = commun Faux = différent


0

Notez que les colonnes des trames de données sont des séries de données. Donc, si vous prenez deux colonnes comme séries de pandas, vous pouvez les comparer comme vous le feriez avec des tableaux numpy.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.