np.searchsorted()是一个在有序数组上执行二分查找的数组方法,返回数组中需要插入值的位置以保持排序:
arr = np.array([0, 1, 7, 12, 15])
arr.searchsorted(9)
'''3'''
# 传递值数组,获取索引数组,默认返回一组相等值左侧的索引
# 因此,传递值0,应当插入索引为0的位置
arr.searchsorted([0, 8, 11, 16])
'''array([0, 3, 3, 5], dtype=int64)'''
arr = np.array([0, 0, 0, 1, 1, 1, 1])
arr.searchsorted([0, 1])
'''array([0, 3], dtype=int64)'''
# 传递side='right',返回一组相等值右侧的索引
arr.searchsorted([0, 1], side='right')
np.searchsorted()应用举例:
# 创建介于0~1000之间的均匀分布的随机数的数值
data = np.floor(np.random.uniform(0, 10000, size=50))
# 创建想用来分割数据的单独的’桶边界‘数组
bins = np.array([0, 100, 1000, 5000, 10000])
data
'''
array([9296., 3163., 1839., 2045., 5677., 5955., 9645., 6531., 7489.,
6535., 7477., 9613., 83., 1064., 2987., 6564., 8098., 8721.,
9646., 7236., 6424., 7174., 4675., 3255., 4396., 7296., 9940.,
6768., 7908., 1709., 268., 8003., 9037., 246., 4917., 5262.,
5963., 519., 8950., 7282., 8183., 5002., 8101., 959., 2189.,
2587., 4681., 4593., 7095., 1780.])
'''
# 用np.searchsorted()得到每个数据点属于哪个区间的标签
# 其中1代表[1,1000)
labels = bins.searchsorted(data)
labels
'''
array([4, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 1, 3, 3, 4, 4, 4, 4, 4, 4, 4,
3, 3, 3, 4, 4, 4, 4, 3, 2, 4, 4, 2, 3, 4, 4, 2, 4, 4, 4, 4, 4, 2,
3, 3, 3, 3, 4, 3], dtype=int64)
'''
# 与pd.groupby()一起用于分箱数据
pd.Series(data).groupby(labels).mean()
'''
1 83.000000
2 498.000000
3 3058.666667
4 7562.366667
dtype: float64
'''
其他可参考资源:https://blog.youkuaiyun.com/qq_33757398/article/details/89876088