Какой самый быстрый способ сравнить записи из двух разных панд DataFrames? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть два списка в виде панелей данных, которые оба содержат столбец имен.Теперь я хочу сравнить эти имена и вернуть список имен, которые появляются в обоих DataFrames.Проблема в том, что мое решение слишком медленное, так как в обоих списках есть несколько тысяч записей.Теперь я хочу узнать, могу ли я что-то еще сделать, чтобы ускорить решение моей проблемы.

Я уже отсортировал свой кадр данных pandas по алфавиту, используя "df.sort_values" в порядке, чтобы создать алфавитный индекс, чтобыимя в первом списке, начинающееся с буквы «X», будет сравниваться только с записями с той же первой буквой во втором списке.

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

Я использую специальную функцию сравнения для сравнения имен и доступа к элементам dataframe с помощью метода df.at [i, 'column_title'].

Редактировать: обратите внимание, что эта конкретная функция сравнения является более сложной, чем простая "==", так как я делаю своего рода нечеткое сравнение строк, чтобы удостовериться, что имена с немного отличающимся написанием по-прежнему помечаются как совпадающие.Я использую библиотеку whoswho, которая возвращает мне частоту совпадения от 0 до 100. Упрощенный пример с моим медленным решением для сравнения данных в рамках pandas выглядит следующим образом:

for i in range(len(list1)):     
    for j in range(len(list2)):  
       # who.ratio returns a match rate between two strings
       ratio = who.ratio(list1.at[i, 'name'], list2.at[j, 'name']) 
       if ratio > 75:
          save(i,j)       # stores values i and j in a result list         

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

Может кто-нибудь сказать мне, есть ли более быстрый способ доступа к определенным элементам в массиве панд?Или, в общем, существует более быстрый способ запуска пользовательской функции сравнения через два кадра данных pd?

Edit2: правописание, дополнительная информация.

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