使用 spacy 匹配来自不同数据帧的 2 列之间的部分值

match partial value between 2 columns from different dataframes using with spacy

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

Df1:

           movie_name correct_id  year
0             birdman        N/A  2010
1   avengers: endgame        N/A  2020
2            deadpool        N/A  2013
3        bla 208-2020        N/A  2018
4  once upon deadpool        N/A  2020

Df2:参考数据帧

               movie_ref     id
0               birdmans  19876
1          The bird King  20807
2  The avengers: endgame  13978
3   once upon a deadpool  49999
4           bla 207-2020  45678
5                bla 208  66097

预期结果:

           movie_name correct_id  year  
0             birdman      19876  2010
1   avengers: endgame      13978  2020
2            deadpool        N/A  2013
3        bla 208-2020      66097  2018
4  once upon deadpool      49999  2020

请问如何使用 spacy 基于部分字符串匹配合并两个数据帧?

注意: 电影的名字不完全一样/并且两个数据帧的长度不同。

您可以使用 difflib 库找到最接近的匹配项,然后您可以创建一个 mapping dict 来获取所需的值:

import difflib

df2.movie_ref = df2.movie_ref.apply(lambda x: difflib.get_close_matches(
    x, df1.movie_name.values, n=1, cutoff=.6)).explode()
df1['correct_id'] = df1.movie_name.map(dict(df2.dropna().values))

输出:

           movie_name  correct_id  year
0             birdman     19876.0  2010
1   avengers: endgame     13978.0  2020
2            deadpool         NaN  2013
3        bla 208-2020     66097.0  2018
4  once upon deadpool     49999.0  2020

注意:根据您的要求更改cutoff值。