Come confrontare due dataframe in panda
Spesso potresti essere interessato a confrontare i valori tra due DataFrames panda per individuare le loro somiglianze e differenze.
Questo tutorial spiega come farlo.
Esempio: confronto di due DataFrame in Panda
Supponiamo di avere i seguenti due DataFrames panda, ciascuno dei quali contiene dati su quattro giocatori di basket:
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
Esempio 1: Scopri se i due DataFrame sono uguali.
Possiamo innanzitutto scoprire se i due DataFrame sono identici utilizzando la funzione DataFrame.equals() :
#see if two DataFrames are identical df1. equals (df2) False
I due DataFrames non contengono esattamente gli stessi valori, quindi questa funzione restituisce correttamente False .
Esempio 2: trova le differenze nelle statistiche del giocatore tra i due DataFrames.
Possiamo trovare le differenze tra gli assist e i punti di ciascun giocatore utilizzando la funzione 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
Il modo di interpretarlo è:
- Il giocatore A aveva lo stesso numero di punti in entrambi i DataFrame, ma aveva altri 3 assist in DataFrame 2.
- Il giocatore B ha ottenuto 9 punti in più e 2 assist in più in DataFrame 2 rispetto a DataFrame 1.
- Il giocatore C ha ottenuto 9 punti in più e 3 assist in più in DataFrame 2 rispetto a DataFrame 1.
- Il giocatore D ha ottenuto 5 punti in più e 5 assist in più in DataFrame 2 rispetto a DataFrame 1.
Esempio 3: trova tutte le righe che esistono solo in un singolo DataFrame.
Possiamo utilizzare il seguente codice per ottenere un elenco completo di righe che appaiono solo in un singolo 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
In questo caso, i due DataFrames non condividono righe identiche, quindi ci sono 8 righe in totale che appaiono solo in uno dei DataFrames.
La colonna denominata “Esiste” ci dice convenientemente in quale DataFrame appare ogni riga in modo univoco.