Как выполнить анти-соединение в pandas


Антиобъединение позволяет вернуть все строки в одном наборе данных, которые не имеют совпадающих значений в другом наборе данных.

Вы можете использовать следующий синтаксис для выполнения анти-соединения между двумя кадрами данных pandas:

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

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

В следующем примере показано, как использовать этот синтаксис на практике.

Пример: выполнение анти-соединения в Pandas

Предположим, у нас есть следующие два кадра данных 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

Мы можем использовать следующий код, чтобы вернуть все строки из первого DataFrame, у которых нет соответствующей команды во втором 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

Мы видим, что есть ровно две команды из первого DataFrame, у которых нет соответствующего имени команды во втором DataFrame.

Анти-соединение сработало, как и ожидалось.

Конечным результатом является DataFrame, который содержит только те строки, в которых имя команды принадлежит первому DataFrame, но не второму DataFrame.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в pandas:

Как выполнить внутреннее соединение в Pandas
Как сделать левое соединение в Pandas
Как сделать перекрестное соединение в Pandas

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *