我们如何有效地获得列表中所有项目的索引中的序数位置

时间:2016-11-15 04:15:33

标签: python pandas numpy

考虑唯一 pd.Index idx和索引列表lst

idx = pd.Index(list('abcdefg'))
lst = list('bdf')

我们可以'b'获取idx.get_loc('b')的序数位置。

我们如何有效地获得lst中所有项目的序数位置?

idx.get_loc(lst)不起作用:

TypeError: '['b', 'd', 'f']' is an invalid key

3 个答案:

答案 0 :(得分:2)

In [317]: timeit (np.array(idx)[:,None]==np.array(lst)).argmax(0)
10000 loops, best of 3: 35.4 µs per loop
In [318]: timeit [idx.index(i) for i in lst]
100000 loops, best of 3: 4.78 µs per loop
In [321]: timeit np.where(np.in1d(idx,lst))
10000 loops, best of 3: 53.1 µs per loop

答案 1 :(得分:2)

我们可以使用np.searchsorted -

idx.searchsorted(lst)

如果idx未排序,我们需要使用sorter参数。

答案 2 :(得分:0)

使lst成为一个numpy数组并与广播进行比较。然后使用argmax来识别位置。

(idx.values[:, None] == np.array(lst)).argmax(0)

array([1, 3, 5])