Подберите два столбца в разных фреймах и покажите результат матча в python - быстро - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть два кадра данных 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 часов и работает ...

...