У меня есть следующие панды dataframe с 50000 уникальных строк и 20 столбцов (входит отрывок из соответствующих столбцов):Поиск один Python dataframe/словарь для нечетких совпадений в другой dataframe
df1:
PRODUCT_ID PRODUCT_DESCRIPTION
0 165985858958 "Fish Burger with Lettuce"
1 185965653252 "Chicken Salad with Dressing"
2 165958565556 "Pork and Honey Rissoles"
3 655262522233 "Cheese, Ham and Tomato Sandwich"
4 857485966653 "Coleslaw with Yoghurt Dressing"
5 524156285551 "Lemon and Raspberry Cheesecake"
Я также иметь следующий dataframe (который я и сохраненную в виде словаря), который имеет 2 колонки и 20000 уникальных строк:
df2 (также сохранен как ди ct_2)
PROD_ID PROD_DESCRIPTION
0 548576 "Fish Burger"
1 156956 "Chckn Salad w/Ranch Dressing"
2 257848 "Rissoles - Lamb & Rosemary"
3 298770 "Lemn C-cake"
4 651452 "Potato Salad with Bacon"
5 100256 "Cheese Cake - Lemon Raspberry Coulis"
То, что я хочу сделать, это сравнить поле «PRODUCT_DESCRIPTION» в df1 в поле «PROD_DESCRIPTION» в df2 и найти ближайший матч/матчи, чтобы помочь с тяжелой подъемной части. Затем мне нужно было бы вручную проверить совпадения, но было бы намного быстрее. Идеальный результат будет выглядеть так, например. с одним или несколькими указанными совпадениями:
PRODUCT_ID PRODUCT_DESCRIPTION PROD_ID PROD_DESCRIPTION
0 165985858958 "Fish Burger with Lettuce" 548576 "Fish Burger"
1 185965653252 "Chicken Salad with Dressing" 156956 "Chckn Salad w/Ranch Dressing"
2 165958565556 "Pork and Honey Rissoles" 257848 "Rissoles - Lamb & Rosemary"
3 655262522233 "Cheese, Ham and Tomato Sandwich" NaN NaN
4 857485966653 "Coleslaw with Yoghurt Dressing" NaN NaN
5 524156285551 "Lemon and Raspberry Cheesecake" 298770 "Lemn C-cake"
6 524156285551 "Lemon and Raspberry Cheesecake" 100256 "Cheese Cake - Lemon Raspberry Coulis"
Я уже завершил соединение, которое определило точные соответствия. Не важно, что индекс сохраняется, так как идентификаторы продукта в каждом df уникальны. Результаты также могут быть сохранены в новый фреймворк данных, так как это будет применено к третьему фреймворку данных, который содержит около 14 миллионов строк.
Я использовал следующие вопросы и ответы (среди прочих):
Is it possible to do fuzzy match merge with python pandas
Fuzzy merge match with duplicates включая модуль пытается медузы, как это предлагается в одном из ответов
Python fuzzy matching fuzzywuzzy keep only the best match
Fuzzy match items in a column of an array
, а также различные петли/функции/отображение и т. д., но не имели успеха, либо получив первый «нечеткий матч», который имеет низкий балл, либо не обнаружено совпадений.
Мне нравится идея создания столбца сопоставления/расстояния, создаваемого согласно here, поскольку это позволило бы мне ускорить процесс ручной проверки.
Я использую Python 2.7, pandas и установлен fuzzywuzzy.
Я использовал это на небольшом подмножестве данных и, похоже, это хорошо работает. Я просто установил его для работы над большим блоком с четырьмя различными итерациями для тестирования различных способов использования fuzz (т. Е. Fuzz.ratio, fuzz.partial_ratio и т. Д.), Чтобы я мог видеть, что дает наилучшие результаты. Цените свою помощь с тяжелым подъемом моей диссертации. – gincard
Просто для добавления - fuzz.token_sort_ratio произвел самый точный результат с примерно 70% успешными матчами. – gincard
@ gincard Сколько данных и как быстро это было ... приблизительно – piRSquared