У меня есть два кадра данных df1 и df2.
df1 = pd.DataFramE({'Name': ['Zebra system','Lion healthcare'], 'Type': ['S','A']})
df2 = pd.DataFrame({'AltName': ['Zebra system llc','abra inc. 54','Lions corp health care','Zebra sys co','lions system atl'], 'Adr': ['45 main st','23 zoo ave', '12 zoo blvd.','56 veg st','23 peach st']})
Пример выше. У df2 около 300 тыс. записей, а у df1 около 10 тыс. записей. Я хочу сопоставить df1 Name с df2 AltName и получить новый фрейм данных с df1 и потенциальными совпадающими строками из df2 вместе со счетом. Я хочу иметь пороговое значение, которое я могу настроить, например, добавить совпадения из df2, которые выше 80.
Это то, что у меня сейчас:
matched=pd.DataFrame({'df1-name':[],'df1-type':[],'df2-name':[],'df2-adr':[]})
for row in df1.index:
first = df1.loc[row,"Name"]
type1 = df1.loc[row,"Type"]
for row2 in df2.index:
second = df2.loc[row2,"AltName"]
adr1 = df2.loc[row2,"Adr"]
matched_token = fuzz.partial_ratio(first,second)
if matched_token>60:
matched.loc[row2,"df1-name"]=first
matched.loc[row2,"df1-type"]=type1
matched.loc[row2,"df2-name"]=second
matched.loc[row2,"df2-adr"]=adr1
однако это очень медленно, код работает более 16 часов и работает ...