У меня есть два списка в виде панелей данных, которые оба содержат столбец имен.Теперь я хочу сравнить эти имена и вернуть список имен, которые появляются в обоих 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: правописание, дополнительная информация.