NUMPY / 熊猫数组与其他数组中的多个值进行比较



我有一个数组

a = np.arange(0, 100)

和另一个具有一些截止点的数组

b = np.array([5, 8, 15, 35, 76])

我想创建一个数组,以便

c = [0, 0, 0, 0, 1, 1, 1, 2, 2, ..., 4, 4, 5]

有没有一种优雅/快速的方法可以做到这一点?在熊猫中可能吗?

这是一个紧凑的方法 -

(a[:,None]>=b).sum(1)

另一个有cumsum——

p = np.zeros(len(a),dtype=int)
p[b] = 1
out = p.cumsum()

另一个有searchsorted——

np.searchsorted(b,a,'right')

另一个有repeat——

np.repeat(range(len(b)+1),np.ediff1d(b,to_begin=b[0],to_end=len(a)-b[-1]))

另一个有isincumsum——

np.isin(a,b).cumsum()

这是一种cut

pd.cut(a,[-np.Inf]+b.tolist()+[np.Inf]).codes
Out[383]: 
array([0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
       4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
       4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
       5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], dtype=int8)

最新更新