numpy/pandas数组与其他数组中的多个值的比较
我有一个数组numpy/pandas数组与其他数组中的多个值的比较,pandas,numpy,Pandas,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] 有没有一种优雅/快速的方法可以做到这一点?在熊猫身上可能吗?这里有一种方法cut pd.cut(a,[-np.Inf]+b.tolist()+[np.Inf]).codes Out[383]: array([0, 0, 0
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]
有没有一种优雅/快速的方法可以做到这一点?在熊猫身上可能吗?这里有一种方法
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)
这里有一条捷径-
(a[:,None]>=b).sum(1)
另一个带有cumsum
-
p = np.zeros(len(a),dtype=int)
p[b] = 1
out = p.cumsum()
np.isin(a,b).cumsum()
另一个带有searchsorted
-
np.searchsorted(b,a,'right')
另一个带有重复-
np.repeat(range(len(b)+1),np.ediff1d(b,to_begin=b[0],to_end=len(a)-b[-1]))
另一个带有isin
和cumsum
-
p = np.zeros(len(a),dtype=int)
p[b] = 1
out = p.cumsum()
np.isin(a,b).cumsum()
c
是以4个零开始还是以5开始?