根据字符串与另一数据框的相似性过滤一个数据框的行

时间:2020-11-05 08:44:17

标签: python python-3.x pandas dataframe

我有两个长度不同的数据帧,比方说A(行数比B多)和B。在两个数据帧中,一列相同('col1'),并且该列具有字符串值。目标是使用Levenshtein距离,如果Levenstein距离大于某个阈值,那么我必须从A中获取行并创建一个新的数据框。

Shape of A is 31K x 4
Shape of B is 5K x 9

这是我用来创建新数据框的以下代码

import pandas as pd
import textdistance as td

B_col1_unique_values = list(B['col1'].unique())
new_A_data = []
def compare_vnum(x):
    for idx, vnum in enumerate(B_col1_unique_values):
        if (td.levenshtein.normalized_similarity(str(vnum), str(x)) > 0.90) and (td.jaro_winkler(str(vnum), str(x)) > 0.95):
            B_code = set(B.loc[B['col1']==vnum, 'Code'].tolist())
            A_data = A.loc[(A['Code'].isin(B_code)) & (A['col1'] == x)]
            new_A_data.extend(A_data.values.tolist())

_ = pd.Series(A['col1'].unique()).apply(compare_vnum)

有什么有效的方法可以减少执行时间?

0 个答案:

没有答案
相关问题