我一直在尝试在Pandas Dataframe 中获得一个新行,它将所有相似的字符串封装为一个列表,并将其放入原始匹配行中。
这是Pandas的原始 Dataframe :
import pandas as pd
d = {'product_name': ['2 pack liner socks', '2 pack logo liner socks', 'b.bare Hipster', 'Lady BARE Hipster Panty'], 'id': [13, 12, 11, 10]}
df = pd.DataFrame(data=d)
我想得到一个如下所示的 Dataframe :
# product_name # id # group
2 pack liner socks 13 ['2 pack liner socks', '2 pack logo liner socks']
2 pack logo liner socks 12 ['2 pack liner socks', '2 pack logo liner socks']
b.bare Hipster 11 ['b.bare Hipster', 'Lady BARE Hipster Panty']
Lady BARE Hipster Panty 10 ['b.bare Hipster', 'Lady BARE Hipster Panty']
我尝试了以下方法:
import thefuzz
from thefuzz import process
df["group"] = df["product_name"].apply(lambda x: process.extractOne(x, df["product_name"], scorer=fuzz.partial_ratio)[0])
它抛出下一个错误:
名称错误:未定义名称“fuzz”
我该如何修复此代码,或者另一方面,是否有其他方法可以解决此问题?
1条答案
按热度按时间x759pob21#
您需要导入fuzz -
from thefuzz import process, fuzz
,但是使用process.extractOne
和product_name
中所有值的列表时,将始终返回该行的实际值,因为它是100%匹配的,所以让我们通过执行df["product_name"].loc[df['product_name'] != x]
将其过滤掉