Come eseguire un anti-join in pandas


Un anti-join consente di restituire tutte le righe in un set di dati che non hanno valori corrispondenti in un altro set di dati.

È possibile utilizzare la seguente sintassi per eseguire un anti-join tra due DataFrames panda:

 outer = df1. merge (df2, how=' outer ', indicator= True )

anti_join = outer[(outer._merge==' left_only ')]. drop (' _merge ', axis= 1 )

L’esempio seguente mostra come utilizzare questa sintassi nella pratica.

Esempio: eseguire un anti-join in Pandas

Supponiamo di avere i seguenti due DataFrames panda:

 import pandas as pd

#create first DataFrame
df1 = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D', 'E'],
                    ' points ': [18, 22, 19, 14, 30]})

print (df1)

  team points
0 to 18
1 B 22
2 C 19
3 D 14
4 E 30

#create second DataFrame
df2 = pd. DataFrame ({' team ': ['A', 'B', 'C', 'F', 'G'],
                    ' points ': [18, 22, 19, 22, 29]})

print (df2)

  team points
0 to 18
1 B 22
2 C 19
3 F 22
4 G 29

Possiamo utilizzare il seguente codice per restituire tutte le righe del primo DataFrame che non hanno un team corrispondente nel secondo DataFrame:

 #perform outer join
outer = df1. merge (df2, how=' outer ', indicator= True )

#perform anti-join
anti_join = outer[(outer._merge==' left_only ')]. drop (' _merge ', axis= 1 )

#view results
print (anti_join)

  team points
3 D 14
4 E 30

Possiamo vedere che ci sono esattamente due squadre del primo DataFrame che non hanno un nome di squadra corrispondente nel secondo DataFrame.

L’anti-join ha funzionato come previsto.

Il risultato finale è un DataFrame che contiene solo le righe in cui il nome del team appartiene al primo DataFrame ma non al secondo DataFrame.

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni nei panda:

Come eseguire un inner join in Pandas
Come eseguire un join a sinistra in Pandas
Come eseguire un cross join in Pandas

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *