объединить кадры данных, используя fuzzywuzzy

Я пытаюсь объединить 2 кадра данных, используя fuzzy-wuzzy. кадр данных df1 представляет собой таблицу с товарами для продажи (150 тыс. строк и 30 столбцов), а df2 — таблицу (30 тыс. строк и 10 столбцов) со справочными данными для названия товара («Defproduto»). У меня нет справочных данных по предметам продажи, но я знаю, что некоторые из них имеют одни и те же справочные данные, хотя названия немного отличаются.

Пример: у меня есть справочные данные для товара aa_XXX_yy_RENT17_zzz_www_class, но нет товара aa_XXX_yy_VER17_zzz_www_class. Используя fuzzy-wuzzy, я могу получить данные ссылки для aa_XXX_yy_RENT17_zzz_www_class и назначить их в таблице продаж для всех товаров с именем aa_XXX_yy_VER17_zzz_www_class.

Я использую следующий код:

    import pandas as pd
    df1 = pd.read_excel('/.../dummy_data_examples.xlsx', sheet_name='Sheet1')
    df2 = pd.read_excel('/.../refdata_examples.xlsx', sheet_name='Sheet1')
    df1['price'] = df1.apply(lambda row:df2.loc[process.extract(row.Defproduto,
                             df2['Defproduto'],limit=1,scorer=fuzz.ratio)[0][2],].price,axis=1)

Проблема: это ужасно медленно. Это занимает около 40 секунд только для выборки из 100 строк. Мне нужно обработать 150К (и нужно обновить 5 разных характеристик df1, а не только цену).

Есть ли более эффективный/быстрый процесс для этого? Я пробовал разные подходы к слиянию pandas, но ни один из них не смог получить нужные результаты.

заранее спасибо


person César Vistas    schedule 08.08.2018    source источник
comment
PS: для fuzzy-wuzzy я использую from fuzzywuzzy import fuzz from fuzzywuzzy import process   -  person César Vistas    schedule 08.08.2018