pandas.Index.searchsorted#

Index.searchsorted(value, side='left', sorter=None)[源代码]#

查找元素应插入以保持顺序的索引。

找到排序后的索引 self 中的索引,使得如果在这些索引之前插入 value 中的对应元素,self 的顺序将被保留。

备注

索引 必须 单调排序,否则可能会返回错误的位置。Pandas 不会 为你检查这一点。

参数:
类似数组或标量

要插入到 self 中的值。

侧边{‘left’, ‘right’}, 可选

如果 ‘left’,则给出找到的第一个合适位置的索引。如果 ‘right’,则返回最后一个这样的索引。如果没有合适的索引,则返回 0 或 N(其中 N 是 self 的长度)。

sorter1-D 类数组, 可选

可选的整数索引数组,将 self 排序为升序。它们通常是 np.argsort 的结果。

返回:
整数或整数数组

一个标量或插入点的数组,其形状与 value 相同。

参见

sort_values

按任一轴的值排序。

numpy.searchsorted

类似的方法来自 NumPy。

备注

二分搜索用于找到所需的插入点。

示例

>>> ser = pd.Series([1, 2, 3])
>>> ser
0    1
1    2
2    3
dtype: int64
>>> ser.searchsorted(4)
3
>>> ser.searchsorted([0, 4])
array([0, 3])
>>> ser.searchsorted([1, 3], side='left')
array([0, 2])
>>> ser.searchsorted([1, 3], side='right')
array([1, 3])
>>> ser = pd.Series(pd.to_datetime(['3/11/2000', '3/12/2000', '3/13/2000']))
>>> ser
0   2000-03-11
1   2000-03-12
2   2000-03-13
dtype: datetime64[s]
>>> ser.searchsorted('3/14/2000')
3
>>> ser = pd.Categorical(
...     ['apple', 'bread', 'bread', 'cheese', 'milk'], ordered=True
... )
>>> ser
['apple', 'bread', 'bread', 'cheese', 'milk']
Categories (4, object): ['apple' < 'bread' < 'cheese' < 'milk']
>>> ser.searchsorted('bread')
1
>>> ser.searchsorted(['bread'], side='right')
array([3])

如果值没有单调排序,可能会返回错误的位置:

>>> ser = pd.Series([2, 1, 3])
>>> ser
0    2
1    1
2    3
dtype: int64
>>> ser.searchsorted(1)  
0  # wrong result, correct would be 1