Результат фильтра и понимания списка столбца DataFrame не соответствует ожиданиям - PullRequest
0 голосов
/ 14 сентября 2018

В основном я хочу найти идентификаторы, которые находятся в DataFrame A, но не в DataFrame B, используя python.Я следовал советам в этом посте , но результат не тот, который я ожидал.

Рассмотрим следующий сценарий:

a = pd.DataFrame(data= {"id":[1, 1, 1, 2, 3, 4, 5],'score':[90,90,91,92,93,94,99]})
b = pd.DataFrame(data= {"id":[1, 2, 3, 4, 5],'letter':['a','b','c','d','e']})

Выполнение:

set([x for x in a['id'] if x not in b['id']])

, как и в упомянутом выше посте , дает {5}, то же самое при выполнении:

set(filter(lambda x: x not in b['id'], a['id']))

И это не то, что я ожидал.Ожидаемый результат должен быть пустым set(), которого можно достичь, выполнив:

set(a["id"]) - set(b["id"])

Может кто-нибудь объяснить, почему приведенные выше коды дают другой результат?Это будет с благодарностью.

1 Ответ

0 голосов
/ 14 сентября 2018

b['id'] - объект Серии Панд. Оператор in будет работать с index серии панд (что составляет от 0 до 4 для кадра данных b), а не с реальным значением. Быстрое исправление будет:

set([x for x in list(a['id']) if x not in list(b['id'])]) # returns set()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...