PythonPandas应用速度太慢模糊匹配

2024-05-13 20:03:38 发布

您现在位置:Python中文网/ 问答频道 /正文

def fuzzy_clean(i, dfr, merge_list, key):  
    for col in range(0,len(merge_list)):
        if col == 0:
            scaled_down = dfr[dfr[merge_list[col]]==i[merge_list[col]]]
        else:
            scaled_down = scaled_down[scaled_down[merge_list[col]]==i[merge_list[col]]]
    if len(scaled_down)>0:
        if i[key] in scaled_down[key].values.tolist():
            return i[key]
        else:
            return pd.to_datetime(scaled_down[key][min(abs([scaled_down[key]-i[key]])).index].values[0])
    else:
        return i[key]

df[key]=df.apply(lambda i: fuzzy_clean(i,dfr,merge_list,key), axis=1)

我试图最终合并两个数据帧,dfr和df。我遇到的问题是我需要在大约9列上合并,其中一列是时间戳,它在两个数据帧之间不太匹配,有时稍微滞后,有时超前。我编写了一个函数,在使用下面的函数时可以正常工作;但是,实际上,它在数十万行中运行太慢了。在

merge_list是每个数据帧共享的100%匹配列的列表

key是一个列的字符串,'timestamp',每个共享,这是不匹配的

如有任何关于加快这一进程的建议,我们将不胜感激!在

^{pr2}$

添加最终合并以供参考:

def fuzzy_merge(df_left, df_right, on, key, how='outer'):
    df_right[key]=df_right.apply(lambda i: fuzzy_clean(i,df_left,on,key), axis=1)
    return pd.merge(df_left, df_right, on=on+[key], how=how, indicator=True).sort_values(key)

Tags: keyrightcleandfreturnifoncol