Значительное улучшение скорости достигается за счет написания векторизованных операций и исключения циклов
Импорт необходимого пакета
from fuzzywuzzy import fuzz
import pandas as pd
import numpy as np
Создание кадра данных из первого списка
dataframecolumn = pd.DataFrame(["apple","tb"])
dataframecolumn.columns = ['Match']
Создание кадра данных из второго списка
compare = pd.DataFrame(["adfad","apple","asple","tab"])
compare.columns = ['compare']
Слияние - декартово произведение путем введения ключа
dataframecolumn['Key'] = 1
compare['Key'] = 1
combined_dataframe = dataframecolumn.merge(compare,on="Key",how="left")
combined_dataframe = combined_dataframe[~(combined_dataframe.Match==combined_dataframe.compare)]
Векторизация
def partial_match(x,y):
return(fuzz.ratio(x,y))
partial_match_vector = np.vectorize(partial_match)
Использование векторизации и получение желаемого результата путем помещенияпорог по шкале
combined_dataframe['score']=partial_match_vector(combined_dataframe['Match'],combined_dataframe['compare'])
combined_dataframe = combined_dataframe[combined_dataframe.score>=80]
Результаты
+--------+-----+--------+------+
| Match | Key | compare | score
+--------+-----+--------+------+
| apple | 1 | asple | 80
| tb | 1 | tab | 80
+--------+-----+--------+------+