Jak porównać dwie ramki danych w pandach
Często możesz być zainteresowany porównaniem wartości między dwiema ramkami DataFrame panda, aby dostrzec ich podobieństwa i różnice.
W tym samouczku wyjaśniono, jak to zrobić.
Przykład: porównanie dwóch ramek danych w Pandach
Załóżmy, że mamy dwie ramki danych pandy, z których każda zawiera dane dotyczące czterech koszykarzy:
import pandas as pd #define DataFrame 1 df1 = pd. DataFrame ({'player': ['A', 'B', 'C', 'D'], 'points': [12, 15, 17, 24], 'assists': [4, 6, 7, 8]}) df1 player points assists 0 to 12 4 1 B 15 6 2 C 17 7 3 D 24 88 #define DataFrame 2 df2 = pd. DataFrame ({'player': ['A', 'B', 'C', 'D'], 'points': [12, 24, 26, 29], 'assists': [7, 8, 10, 13]}) df2 player points assists 0 to 12 7 1 B 24 8 2 C 26 10 3 D 29 13
Przykład 1: Dowiedz się, czy dwie ramki danych są takie same.
Możemy najpierw sprawdzić, czy obie ramki DataFrame są identyczne, korzystając z funkcji DataFrame.equals() :
#see if two DataFrames are identical df1. equals (df2) False
Dwie ramki danych nie zawierają dokładnie tych samych wartości, więc ta funkcja poprawnie zwraca False .
Przykład 2: Znajdź różnice w statystykach graczy pomiędzy dwiema ramkami DataFrame.
Możemy znaleźć różnice pomiędzy asystami i punktami każdego gracza za pomocą funkcji pandas subtract() :
#subtract df1 from df2 df2. set_index ('player'). subtract (df1.set_index('player')) assist points player At 0 3 B 9 2 C 9 3 D 5 5
Sposób interpretacji tego jest następujący:
- Gracz A miał tę samą liczbę punktów w obu DataFrame, ale miał 3 asysty więcej w DataFrame 2.
- Gracz B miał 9 punktów więcej i 2 asysty więcej w DataFrame 2 w porównaniu do DataFrame 1.
- Gracz C miał 9 punktów więcej i 3 asysty więcej w DataFrame 2 w porównaniu do DataFrame 1.
- Gracz D miał 5 punktów więcej i 5 asyst więcej w DataFrame 2 w porównaniu do DataFrame 1.
Przykład 3: Znajdź wszystkie wiersze, które istnieją tylko w jednej ramce danych.
Możemy użyć poniższego kodu, aby uzyskać pełną listę wierszy, które pojawiają się tylko w jednej ramce DataFrame:
#outer merge the two DataFrames, adding an indicator column called 'Exist' diff_df = pd. merge (df1, df2, how=' outer ', indicator=' Exist ') #find which rows don't exist in both DataFrames diff_df = diff_df. loc [diff_df[' Exist '] != ' both '] diff_df player points assists Exist 0 A 12 4 left_only 1 B 15 6 left_only 2 C 17 7 left_only 3 D 24 8 left_only 4 A 12 7 right_only 5 B 24 8 right_only 6 C 26 10 right_only 7 D 29 13 right_only
W tym przypadku dwie ramki danych nie mają wspólnych wierszy, więc łącznie jest 8 wierszy, które pojawiają się tylko w jednej ramce danych.
Kolumna oznaczona „Istnieje” w wygodny sposób informuje nas, w której ramce danych pojawia się każdy wiersz.