df1
Имя
Производительность
Мэтт Коул-младший
89
Стив Смит
72
DJ Watson
91
Амарье Джордж
92
Стив Нуркич
84
Чарльз Лонг
87
Ник Китч
73
df2
Имя
Год
Мэтт Коул младший
2023
Стив Смит III
2022
Д.Дж. Уотсон
2021
Амаре Джордж
2020
Стив Нуркич
2021
Чарльз Лонг-младший
2022
Николас Китч
2023
Желаемый результат:
Имя
Год
Работа
Мэтт Коул-младший
2023
89
Стив Смит III
2022
72
Д.Дж. Уотсон
2021
91
Амаре Джордж
2020
92
Стив Нуркич
2021
84
Чарльз Лонг-младший
2022
87
Николас Китч
2023
73
Я думал, что это может сработать, но выполнение кода занимало слишком много времени:
Код: Выделить всё
from fuzzywuzzy import process
dfm = pd.DataFrame(df2["Name"].apply(lambda x: process.extractOne(x, df1["Name"])) .tolist()])
Код: Выделить всё
import difflib
from functools import partial
#the below function is inspired from https://stackoverflow.com/a/56521804/9840637
def get_closest_match(x,y):
"""x=possibilities , y = input"""
f = partial(
difflib.get_close_matches, possibilities=x.unique(), n=1,cutoff=0.5)
matches = y.astype(str).drop_duplicates().map(f).fillna('').str[0]
return pd.DataFrame([y,matches.rename('Name')]).T
temp = get_closest_match(df2['Name'],df1['Name'])
display(temp)
Подробнее здесь: https://stackoverflow.com/questions/764 ... tial-match
Мобильная версия