Какой быстрый способ проверить, есть ли каждая из 10M строк в списке из 4000 других строк? - PullRequest
0 голосов
/ 02 октября 2019

У меня есть список block_list из 4000 заблокированных доменных имен. Мне нужно проверить каждую строку в серии панд inspection_list["string"] из 10M строк, чтобы увидеть, является ли строка заблокированным доменным именем. Если это так, отметьте это True, иначе False

Должен быть более быстрый или распараллеливаемый способ лучше, чем:

for i, r in inspection_list.iterrows()
     if r["string"] in inspection_list:
          inspection_list["blocked"][i] = True
     else:
          inspection_list["blocked"][i] = False

1 Ответ

0 голосов
/ 02 октября 2019

df.series.isin () оказался намного быстрее, чем применимы панды. Цикл, приведенный выше, я даже не дал завершиться после того, как это заняло более 30 секунд.

На подмножестве 500 тыс. Строк:

%%time
check["blocked"]=check["domain"].isin(blocked["domain"])

Время стены: 48,4 мс

%%time
check["blocked"]=check["domain"].apply(lambda x: True if x in blocked["domain"] else False)

Время стены: 6,49 с

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...