【发布时间】:2017-05-18 05:29:42
【问题描述】:
我有以下 pandas 数据框,其中包含 50,000 行和 20 列(包括相关列的 sn-p):
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"
我还有以下数据框(我也以字典形式保存),它有 2 列和 20,000 个唯一行:
df2(也保存为 dict_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"
我想要做的是将 df1 中的“PRODUCT_DESCRIPTION”字段与 df2 中的“PROD_DESCRIPTION”字段进行比较,并找到最接近的匹配项以帮助完成繁重的工作。然后我需要手动检查匹配,但它会快得多理想的结果看起来像这样,例如注明一个或多个部分匹配:
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 中的产品 ID 都是唯一的。结果也可以保存到一个新的数据帧中,因为这将被应用到具有大约 1400 万行的第三个数据帧。
我使用了以下问题和答案(除其他外):
Is it possible to do fuzzy match merge with python pandas
Fuzzy merge match with duplicates 包括按照答案之一的建议尝试 jellyfish 模块
Python fuzzy matching fuzzywuzzy keep only the best match
Fuzzy match items in a column of an array
还有各种循环/函数/映射等,但都没有成功,要么获得第一个得分低的“模糊匹配”,要么没有检测到匹配。
我喜欢按照here 生成匹配/距离分数列的想法,因为这样可以加快手动检查过程。
我正在使用 Python 2.7、pandas 并安装了fuzzywuzzy。
【问题讨论】:
标签: python python-2.7 pandas string-matching fuzzywuzzy