Python 基于与另一个数据帧的字符串相似性筛选一个数据帧的行

Python 基于与另一个数据帧的字符串相似性筛选一个数据帧的行,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有两个不同长度的数据帧,比如A(比B有更多的行)和B。在这两个数据帧中,有一列是相同的(“col1”),列有字符串值。目标是使用Levenshtein距离,如果Levenshtein距离大于某个阈值,则我必须从中获取行并创建新的数据帧 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 = l

我有两个不同长度的数据帧,比如A(比B有更多的行)和B。在这两个数据帧中,有一列是相同的(“col1”),列有字符串值。目标是使用Levenshtein距离,如果Levenshtein距离大于某个阈值,则我必须从中获取行并创建新的数据帧

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)


我能用什么有效的方法来缩短执行时间?

获得显著加速效果的唯一方法是对正在执行的任何操作进行矢量化。这个问题与熊猫无关。不确定是否存在Levenshtein距离的矢量化实现,您最好看看tf idf或余弦相似性的高效实现。获得显著加速的唯一方法是对您正在执行的任何操作进行矢量化。这个问题与熊猫无关。不确定是否存在Levenshtein距离的矢量化实现,您最好看看tf idf或余弦相似性的有效实现。