通过使用模糊字符串匹配查找两列值之间的最高精度百分比
我有两个数据帧,我试图在两个数据帧的特定列值之间使用模糊匹配
假设df1有5行,df2有4行,我想选取df1的每一行的值,并与df2的每一行匹配,找到最高的精度。假设DF1中的ROW1与DF2的所有行进行比较,因此无论从DF2的行具有最高的精度,我们都将其视为输出。对于df1中的每一行,应考虑相同的情况
输入数据:
Dataframe1
id_number company_name match_acc
IN2231D AXN pvt Ltd
UK654IN Aviva Intl Ltd
SL1432H Ship Incorporations
LK0678G Oppo Mobiles pvt ltd
NG5678J Nokia Inc
Dataframe2
identity_no Pincode company_name
IN2231 110030 AXN pvt Ltd
UK654IN 897653 Aviva Intl Ltd
SL1432 07658 Ship Incorporations
LK0678G 120988 Oppo Mobiles Pvt Ltd
希望找到最高的准确率百分比,并在match_acc列中提交值
我目前使用的代码:
df1 = pd.read_excel(open(r'input.xlsx', 'rb'), sheet_name='sheet1')
df2 = pd.read_excel(open(r'input.xlsx', 'rb'), sheet_name='sheet2')
from fuzzywuzzy import fuzz
for index, row in df1.iterrows():
df1['match_acc']= fuzz.partial_ratio(df1['id_number'], df2['identity_no'])
print(df1['match_acc'])
我一直在使用模糊模糊,如果有任何其他方法,以及请建议
任何建议
您可以将
df1.id_number
与df2.identity_no
交叉连接,并计算每对的fuzz.ratio()
(非部分比率),然后map()
将最大分数返回到df1
:说明
{a1}的{}方法产生{}和{}的笛卡尔积:
^{} 每对的模糊计算器:
然后^{} 将每
id_number
的最大得分转换为df1.match_acc
:您可以使用
fuzzywuzzy
的process
函数进行一对多操作。 另外,使用rapidfuzz
代替fuzzywuzzy
,后者具有相同的功能,但它基于字符串算法执行一些预处理以提供更快的结果pip install rapidfuzz
相关问题 更多 >
编程相关推荐