Сортируется ли поиск быстрее, чем get_loc, чтобы найти местоположение метки в индексе DataFrame?

python pandas

455 просмотра

1 ответ

Мне нужно найти целочисленное местоположение для метки в индексе Панд. Я знаю, что могу использовать метод get_loc, но потом я обнаружил поисковый запрос. Просто интересно, стоит ли использовать последний для улучшения скорости, так как мне нужно искать тысячи этикеток.

Автор: luca Источник Размещён: 08.11.2019 11:28

Ответы (1)


5 плюса

Решение

Это будет зависеть от вашего варианта использования. используя пример @ ayhan.

При get_locэтом при первом поиске возникает большая первоначальная стоимость создания хеш-таблицы.

In [22]: idx = pd.Index(['R{0:07d}'.format(i) for i in range(10**7)])
In [23]: to_search = np.random.choice(idx, 10**5, replace=False)
In [24]: %time idx.get_loc(to_search[0])
Wall time: 1.57 s

Но последующие поиски могут быть быстрее. (не гарантируется, зависит от данных)

In [9]: %%time
   ...: for i in to_search:
   ...:     idx.get_loc(i)
Wall time: 200 ms

In [10]: %%time
    ...: for i in to_search:
    ...:     np.searchsorted(idx, i)
Wall time: 486 ms

Также, как отметил Джефф, get_locгарантированно всегда работает, где searchsortedтребует монотонности (и не проверяет).

Автор: chrisb Размещён: 20.08.2016 03:48
Вопросы из категории :
32x32