考虑唯一 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
答案 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)
答案 2 :(得分:0)
使lst
成为一个numpy数组并与广播进行比较。然后使用argmax
来识别位置。
(idx.values[:, None] == np.array(lst)).argmax(0)
array([1, 3, 5])