Когда индекс уникален, панды используют хэш-таблицу для сопоставления ключа со значением O (1). Когда индекс не является уникальным и сортируется, pandas используют двоичный поиск O (logN), когда индексу случайным упорядоченным pandas необходимо проверить все ключи в индексе O (N).
Вы можете вызвать sort_index
:
import numpy as np
import pandas as pd
x = np.random.randint(0, 200, 10**6)
df1 = pd.DataFrame({'x':x})
df2 = df1.set_index('x', drop=False)
df3 = df2.sort_index()
%timeit df1.loc[100]
%timeit df2.loc[100]
%timeit df3.loc[100]
результат:
10000 loops, best of 3: 71.2 µs per loop
10 loops, best of 3: 38.9 ms per loop
10000 loops, best of 3: 134 µs per loop