Як виконати анти-з'єднання в pandas


Анти-з’єднання дозволяє повертати всі рядки в одному наборі даних, які не мають відповідних значень в іншому наборі даних.

Ви можете використовувати наступний синтаксис для виконання анти-з’єднання між двома пандами DataFrames:

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

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

У наступному прикладі показано, як використовувати цей синтаксис на практиці.

Приклад: виконання анти-з’єднання в Pandas

Припустімо, що ми маємо наступні два panda DataFrames:

 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

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *