通过最接近的匹配连接有序数据框

时间:2019-07-18 12:00:40

标签: python pandas optimization

我有两个带有事件的有序数据帧,但是可能缺少一些事件:

import pandas as pd
import numpy as np
df1 = pd.DataFrame({'val': [   1.9, 2, 10, 7, 4], 'cat': range(5)})
df2 = pd.DataFrame({'val': [5, 2.1, 2,     7, 4, 1.9], 'var': range(6)})

在上面的示例中,预期的对((None,0), (0,1), (1,2), (2,None), (3,3), (4,4), (None,5))由缩进指示。

现在,我想通过val外部连接两个数据帧,如上面的示例所示,保留现有顺序(因此第一个df中的1.9应该与相同位置的对应2.1配对,而不是在第二个df末尾的完全匹配)。

merge_asof要求按键(val)对两个df进行排序,merge_ordered仅接受完全匹配。

首先,我创建了一个可能的匹配项列表:

tol = .3
closeness = np.abs(df1.val[:,np.newaxis] - df2.val[np.newaxis,:])
idx = np.vstack(np.where(closeness < tol))

# array([[0, 0, 0, 1, 1, 1, 3, 4],
#        [1, 2, 5, 1, 2, 5, 3, 4]])

成对的3->34->4很明显,但是剩余的可能性使我怀疑它比我想象的还要复杂。

0 个答案:

没有答案