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)
我找到了一个可行的解决方案。熊猫有一个合并,仍然验证可能的重复计算,但似乎做得不错。在
相关问题 更多 >
编程相关推荐