问题描述
我有两个数据框,如下所示:
df_1:
MatID MatCode Desc_df_1 Net Price
210 1002 125 MS SKLT FLANGE 310
212 1003 75 MS SKLT FLANGE 110
206 1018 3.5 coupling 210
df_2:
MatID MatCode IndentID Desc_df_2 Net Price
100 1104 16 MOUNTING BRACKET nan
211 1107 16 75 MS SK FLANGE nan
133 1044 16 2.5 ERSW PIPE nan
目的:我想
- 在
Desc_df_1
和Desc_df_2
之间运行模糊字符串匹配 - 使用`fuzz.partial_ratio(例如,阈值> 80)查找最接近的匹配项
- 在第2步中与最接近的字符串匹配相对应的
Net Price
中的df_1
上 - 将
Net price
中的df_2
相对于与Desc_df_2
中最接近的Desc_df_1
匹配的MatCode - 删除所有不需要的行
所以最终数据帧df_2应该看起来像
MatID MatCode IndentID Desc_df_2 Net Price
211 1107 16 75 MS SK FLANGE 110
到目前为止,我的方法是
r = []
for m in df_2['Desc_df_2'].tolist():
ratio = process.extract(m,df_1['Desc_df_1'],limit=1,scorer=fuzz.partial_ratio)
r.append(ratio)
flat_lst = [i for item in r for i in item]
df_ratio = pd.DataFrame(flat_lst,columns=['Text','score','Extra'])
text = df_ratio.loc[df_ratio['score']==df_ratio['score'].max(),'Text'].iloc[0]
price = df_1.loc[df_1['Desc_df_1']==text,'Net Price'].iloc[0]
现在我被困在这个阶段。如何从此处继续进行上述的第4点和第5点。
提示:我想获取正在执行步骤3的df_2的索引。这样df_2.loc[index,'Net Price']=price
任何线索将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)