python - сравнение большого и малого набора данных - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть 2 pandas данных в python. Один очень маленький df1 (<200 строк), а другой очень большой <code>df2 (> 20 миллионов строк). Я хочу сравнить маленький df с большим, и получить все индексы большего кадра данных df2 для всех соответствующих строк.

Я кодировал следующее -

df3 = df2[df2['Row Idx'].isin(df1['Row Idx'])]

При этом все строки df2 сравниваются с df1, что неэффективно, а выполнение очень медленное. Для 200 строк это занимает около 30 секунд. Я пытался запустить его в Google Colab и AWS также, но производительность аналогична.

Это сравнение выполняется в al oop для ~ 400K раз согласно некоторому условию.

Есть ли способ улучшить производительность?

1 Ответ

0 голосов
/ 20 февраля 2020

более эффективным способом было бы сделать соединение между фреймами данных - что-то вроде:

df1.merge (df2, on = 'Row Idx)

подробности см. Здесь: https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html

также, pandas имеет проблемы с производительностью, особенно с большими наборами данных, может быть полезно рассмотреть некоторые альтернативы, такие как:

  • modin - быстрее, чем pandas, работает с тем же API, что упрощает переход

  • vaex - также работает с файлами отображения памяти ( не все данные считываются в память), что очень важно - но API отличается, поэтому есть большая кривая обучения

  • pyspark

  • dask

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