将模糊比率应用于两个数据帧
Apply fuzzy ratio to two dataframes
我有两个数据帧,其中 我想模糊字符串比较并将我的函数应用于两个数据帧:
sample1 = pd.DataFrame(data1.sample(n=200, random_state=42))
sample2 = pd.DataFrame(data2.sample(n=200, random_state=13))
def get_ratio(row):
sample1 = row['address']
sample2 = row['address']
return fuzz.token_set_ratio(sample1, sample2)
match = data[data.apply(get_ratio, axis=1) >= 78] #I want to apply get_ratio to both sample1 and sample2
no_matched = data[data.apply(get_ratio, axis=1) <= 77] #I want to apply get_ratio to both sample1 and sample2
在此先感谢您的帮助!
您需要创建地址的排列组合。然后用它来比较匹配的。你可以找一个类似的问题.
对于您的情况,您首先需要创建排列:
combs = list(itertools.product(data1["address"], data2["address"]))
combs = pd.DataFrame(combs)
然后使用正确的方法进行匹配:
combs['score'] = combs.apply(lambda x: fuzz.token_set_ratio(x[0],x[1]), axis=1)
现在根据分数可以找到匹配或不匹配的。
我建议您首先尝试对地址进行分组和清理(即,降低大小写,删除重复项)否则可能需要很长时间才能计算。
我有两个数据帧,其中 我想模糊字符串比较并将我的函数应用于两个数据帧:
sample1 = pd.DataFrame(data1.sample(n=200, random_state=42))
sample2 = pd.DataFrame(data2.sample(n=200, random_state=13))
def get_ratio(row):
sample1 = row['address']
sample2 = row['address']
return fuzz.token_set_ratio(sample1, sample2)
match = data[data.apply(get_ratio, axis=1) >= 78] #I want to apply get_ratio to both sample1 and sample2
no_matched = data[data.apply(get_ratio, axis=1) <= 77] #I want to apply get_ratio to both sample1 and sample2
在此先感谢您的帮助!
您需要创建地址的排列组合。然后用它来比较匹配的。你可以找一个类似的问题
对于您的情况,您首先需要创建排列:
combs = list(itertools.product(data1["address"], data2["address"]))
combs = pd.DataFrame(combs)
然后使用正确的方法进行匹配:
combs['score'] = combs.apply(lambda x: fuzz.token_set_ratio(x[0],x[1]), axis=1)
现在根据分数可以找到匹配或不匹配的。
我建议您首先尝试对地址进行分组和清理(即,降低大小写,删除重复项)否则可能需要很长时间才能计算。