Python:基于与其他数据框的模糊字符串匹配,更新Pandas数据框中的单元格值

问题描述

我有两个数据框,如下所示:

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

目的:我想

  1. Desc_df_1Desc_df_2之间运行模糊字符串匹配
  2. 使用`fuzz.partial_ratio(例如,阈值> 80)查找最接近的匹配项
  3. 在第2步中与最接近的字符串匹配相对应的Net Price中的df_1
  4. Net price中的df_2相对于Desc_df_2中最接近的Desc_df_1匹配的MatCode
  5. 删除所有不需要的行

所以最终数据帧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 (将#修改为@)