应用模糊匹配,得到每个匹配的得分矩阵的ID列

2024-10-01 02:29:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个熊猫数据帧,我想做一个模糊匹配基于其中一列。一个大约5000行的数据帧(参考数据帧)包含具有相似ID的名称别名,我想将这些别名与另一个ID为1500行的数据帧(外部)进行匹配。在

因此,对于每一个匹配,我将得到模糊分数,然后决定我想使用哪个分数作为两个数据帧之间的最佳匹配。下面的例子中使用了两个数据帧的子集。在

import pandas as pd    
from fuzzywuzzy import fuzz

#Reference data frame
aka_df = pd.DataFrame({"grp_id":['M-00353','M-00353','M-00353','M-00538','M-00538','M-00160','M-00160','M-00160','M-00509','M-00509','M-00509','M-00509'],
    "name": ['Buatan I Mill','Inti Indosawit Subur (PKS Buatan I)','Pt Inti Indosawit Subur Buatan I','Batang Kulim','Musim Mas - Batang Kulim','Hindoli (Sungai Lilin)','Hindoli (Pks Sei Lilin)','PT Hindoli',
'Agrowiratama Sukajadi Sawit Mekar 1','PKS PT. Sukajadi Sawit Mekar','Sukajadi Sawit Mekar','Sukajadi Sawit Mekar 1']})

# External data frame    
ext_df = pd.DataFrame({"uml_id": ['P021','P054','P058','P106'],
"mill_name": ['Pt Inti Indosawit Subur - Buatan I','Pt. Musim Mas - Pks Batang Kulim', 'Cargill - Hindoli', 'Pks Pt. Sukajadi Sawit Mekar']})


compare = pd.MultiIndex.from_product([aka_df['name'],ext_df['mill_name']]).to_series()

def metrics(tup):
    return pd.Series([fuzz.ratio(*tup)],['ratio'])

# Create df
compare_df = compare.apply(metrics)

# Reshaping data frame
merge_df = compare_df.reset_index()
unstack_df = merge_df.groupby(['level_0','level_1'])[ 'ratio'].mean().unstack('level_1')

我对比较这两个数据帧的代码的参考来自this问题。它确实大致上满足了我的需要:

enter image description here

但是,我需要匹配矩阵中更关键的列是来自两个数据帧的ID,如下所示。在

enter image description here

我对python还是个新手,我相信这是很容易做到的,但是在这方面的一些指导是非常值得赞赏的。在


Tags: 数据nameptiddfdataframecompare
1条回答
网友
1楼 · 发布于 2024-10-01 02:29:10

您可以在传递给apply()的函数中使用merge()和字典理解:

import pandas as pd    
from fuzzywuzzy import process,fuzz

def get_matches(x):

    matches = process.extract(x['name'], ext_df['mill_name'], scorer=fuzz.ratio)
    return pd.Series({ext_df.iloc[i[2]]['uml_id']: i[1] for i in matches})

aka_df.merge(aka_df.sort_values('name').apply(get_matches, axis=1), left_index=True, right_index=True)

产量:

^{pr2}$

另外,这里还有一个有用的link,它提供了对不同的fuzzywuzzy评分算法的一些见解。在

相关问题 更多 >