假设我有两个ndarray:
a = [[1.1,10]
[2.2,20]
[3.3,30]
[4.4,40]
[5.5,50]]
b = [[1.5,100]
[1.9,200]
[2.3,250]
[3.9,300]]
我想将这两张桌子连在一起,以便我返回:
c = [[1.1,10,None]
[2.2,20,200] #note this is 200 not 250
[3.3,30,250]
[4.4,40,300]
[5.5,50,300]]
换句话说,我想做一些类似“左连接B,如果键完全不匹配,请使用小于和最接近B的键”。
如果我没有正确格式化这个问题,请原谅我,这是我在StackOverflow上的第一个问题,而且我不是一个专业的程序员。我通过StackOverflow和Google彻底搜索过。
我有点暗示答案可能介于merging indexed array in Python之间 并使用蒙面数组。基本上,我不知道,请帮忙!
答案 0 :(得分:3)
import numpy as np
a = np.array([[1.1,10],
[2.2,20],
[3.3,30],
[4.4,40],
[5.5,50]])
b = np.array([[1.5,100],
[1.9,200],
[2.3,250],
[3.9,300]])
idx = b[:,0].searchsorted(a[:,0], side='right')
bval = np.r_[np.nan, b[:,1]]
c = np.column_stack([a, bval[idx]])
print(c)
产量
[[ 1.1 10. nan]
[ 2.2 20. 200. ]
[ 3.3 30. 250. ]
[ 4.4 40. 300. ]
[ 5.5 50. 300. ]]
请注意,上述计算会将3.3
与250
相关联,而非200
。如果我正确理解了问题,那就是期望的结果,因为3.3 > 2.3
。