Jak porównać kolumny w różnych ramkach danych?

23

Chciałbym porównać jedną kolumnę pliku df z innymi plikami df. Kolumny to imiona i nazwiska. Chciałbym sprawdzić, czy osoba w jednej ramce danych jest w innej.

a_a_a
źródło
Czy możesz wskazać, jak ma wyglądać wynik? Czy to df z nazwami pojawiającymi się w obu dfs i czy potrzebujesz także czegoś innego, takiego jak count, lub pasująca kolumna w df2, itp. Dzięki!
Lyrist
Możesz wewnętrznie połączyć dwie ramki danych w kolumnach, na których Ci zależy, i sprawdzić, czy liczba wierszy w wyniku jest dodatnia.
dsaxton
Do Twojej wiadomości, porównanie imienia i nazwiska z dowolnym porządnym zestawem nazwisk skończy się bólem - wiele osób ma to samo imię!
Ken Syme

Odpowiedzi:

22

Jeśli chcesz sprawdzić równe wartości w pewnej kolumnie, powiedzmy Nazwa, możesz połączyć obie ramki danych w nową:

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

Myślę, że jest to bardziej wydajne i szybsze niż w whereprzypadku dużych zbiorów danych

Tarek
źródło
1
Myślę, że chcemy tutaj użyć połączenia wewnętrznego, a następnie sprawdzić jego kształt.
dsaxton
10
df1.where(df1.values==df2.values).notna()

Truewpisy pokazują wspólne elementy. Ujawnia to również pozycję wspólnych elementów, w przeciwieństwie do rozwiązania z merge.

pcko1
źródło
co jest df.w twojej odpowiedzi Są tylko df1i df2niedf
LearneR
3

Porównywanie wartości w dwóch różnych kolumnach

Za pomocą zestawu uzyskaj unikalne wartości w każdej kolumnie. Przecięcie tych dwóch zestawów zapewni unikalne wartości w obu kolumnach.

Przykład:

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']))

Wydajność: {2, 5}


Porównywanie nazw kolumn dwóch ramek danych

W przypadku próby porównania nazw kolumn dwóch ramek danych:

Jeśli df1i df2są dwie ramki danych: set(df1.columns).intersection(set(df2.columns))

Zapewni to unikalne nazwy kolumn zawarte w obu ramkach danych.

Przykład:

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))

Wydajność: {'c2', 'c3'}

aathiraks
źródło
Myślę, że pytanie dotyczy porównania wartości w dwóch różnych kolumnach w różnych ramkach danych, ponieważ osoba pytająca chce sprawdzić, czy osoba w jednej ramce danych znajduje się w innej.
Divyanshu Shekhar
Dzięki, źle zrozumiałem pytanie. Zaktualizowałem odpowiedź teraz.
aathiraks
1

Można dokładnie sprawdzić dokładną liczbę wspólnych i różnych pozycjach między dwoma df za pomocą ISIN i value_counts ()

Tak:

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

Wynik:

przykład jest

Prawda = wspólna Fałsz = inna

Kuba S.
źródło
0

Zauważ, że kolumny ramek danych to serie danych. Więc jeśli weźmiesz dwie kolumny jako serie pand, możesz porównać je tak samo, jak w przypadku tablic numpy.

Timur
źródło