匹配 Dataframe 中包含名称的dfs

uyhoqukh  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(302)

我有两个数据集,其中有一个名称列表。一个数据集还有另一个数据集没有的额外名称,另一个数据集有重复的名称。我的目标是创建第三个数据框,列出所有差异并排除匹配
考虑这些 Dataframe :

df =
 Full name
dan  lastname1
dan  lastname1
bill lastname2
bob  lastname3
brad lastname4

df2=
Full name
daniel  lastname1
william lastname2
robert  lastname3
bradley lastname4
Jane    lastname5

d3 =
Full name             match       
daniel  lastname1     dan lastname1   
william lastname2     bill lastname2
robert  lastname3     bob  lastname3
bradley lastname4     brad lastname4
Jane    lastname5     NaN

我尝试合并 Dataframe 并删除重复的 Dataframe ,但没有成功。我认为这些额外的名字和昵称会让人大吃一惊。

ulmd4ohb

ulmd4ohb1#

使用 fuzzywuzzy 完成任务的软件包:

from fuzzywuzzy import process

THRESHOLD = 80

best_match = df2['Full name'].apply(lambda x: process.extractOne(x, df1['Full name'],
                                                                 score_cutoff=THRESHOLD))

df2['match'] = best_match.apply(pd.Series)[0]

输出:

>>> df2
            Full name            match
0    daniel lastname1    dan lastname1
1  william lastname 2  bill lastname 2
2    robert lastname3    bob lastname3
3  bradley lastname 4  brad lastname 4
4     Jane lastname 5              NaN

>>> best_match
0      (dan lastname1, 90, 0)
1    (bill lastname 2, 85, 2)
2      (bob lastname3, 83, 3)
3    (brad lastname 4, 91, 4)
4                        None
Name: Full name, dtype: object

如何安装

pip install fuzzywuzzy python-levenshtein
conda install -c conda-forge fuzzywuzzy python-levenshtein

这个 python-levenshtein 软件包不是强制性的,但它在字符串匹配中提供了4-10倍的加速。

相关问题