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.

a_a_a
la source
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

Tarek
la source
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.

pcko1
la source
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'}

aathiraks
la source
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

Kuba S
la source
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.

Timur
la source