Я в основном пытаюсь объединить 2 кадра данных, используя приблизительное совпадение. Как я это делаю в общем, указано ниже:
- есть список строк для сопоставления
- определить функцию, используя fuzzy's process.extract
- применить эту функцию ко всем строкам в первом кадре данных, чтобы получить совпадение
- объединить 1-й DF со 2-м DF на основе соответствующего ключа.
Это мой код:
def closest_match(x):
matched = (process.extract(x, matchlist[matchlist.match_name.str.startswith(x[:3])].match_name, limit=1, scorer=fuzz.token_sort_ratio))
if matched:
print(matched[0])
return matched[0][0]
else:
return None
df1['key'] = df1.df1_name.apply(lambda x: closest_match(x))
# merge with 2nd df
joined = df1.merge(df2, left_on='key', right_on='df2_name')
Проблема здесь в скорости. Этот код занимает очень много времени для циклов 10000 итераций. И мне нужно это для 100K матча. Как ускорить этот код?