我有两个长度不同的数据帧,比方说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)
有什么有效的方法可以减少执行时间?