Como realizar um anti-join no pandas


Uma anti-junção permite retornar todas as linhas em um conjunto de dados que não possuem valores correspondentes em outro conjunto de dados.

Você pode usar a seguinte sintaxe para realizar uma anti-junção entre dois DataFrames do pandas:

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

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

O exemplo a seguir mostra como usar essa sintaxe na prática.

Exemplo: realizando uma anti-junção no Pandas

Vamos supor que temos os dois DataFrames panda a seguir:

 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

Podemos usar o código a seguir para retornar todas as linhas do primeiro DataFrame que não possuem uma equipe correspondente no segundo 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

Podemos ver que existem exatamente duas equipes do primeiro DataFrame que não possuem um nome de equipe correspondente no segundo DataFrame.

A anti-junção funcionou conforme o esperado.

O resultado final é um DataFrame que contém apenas as linhas onde o nome da equipe pertence ao primeiro DataFrame, mas não ao segundo DataFrame.

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras tarefas comuns em pandas:

Como fazer uma junção interna no Pandas
Como fazer uma junção à esquerda no Pandas
Como fazer uma junção cruzada no Pandas

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *