Как и dict, индекс DataFrame поддерживается хэш-таблицей. Поиск строк на основе значений индекса похож на поиск значений dict на основе ключа.
Напротив, значения в столбце похожи на значения в списке.
Поиск строк основанные на значениях индекса быстрее, чем поиск строк на основе значений столбцов.
Например, рассмотрим
df = pd.DataFrame({'foo':np.random.random(), 'index':range(10000)})
df_with_index = df.set_index(['index'])
. Вот как вы могли бы искать любую строку, где столбец df['index']
равен 999. Pandas должен прокручивать каждое значение в столбце до найдите те, которые равны 999.
df[df['index'] == 999]
# foo index
# 999 0.375489 999
Вот как вы можете искать любую строку, где индекс равен 999. С индексом Pandas использует хеш-значение для поиска строк:
df_with_index.loc[999]
# foo 0.375489
# index 999.000000
# Name: 999, dtype: float64
Поиск строк по индексу намного быстрее, чем поиск строк по значению столбца:
In [254]: %timeit df[df['index'] == 999]
1000 loops, best of 3: 368 µs per loop
In [255]: %timeit df_with_index.loc[999]
10000 loops, best of 3: 57.7 µs per loop
Обратите внимание, что для построения индекса требуется время:
In [220]: %timeit df.set_index(['index'])
1000 loops, best of 3: 330 µs per loop
Таким образом, индекс имеет преимущество только тогда, когда вы выполняете много запросов этого типа.
Иногда индекс играет роль в изменении формы DataFrame. Многие функции, такие как set_index
, stack
, unstack
, pivot
, pivot_table
, melt
, lreshape
и crosstab
, используют или управляют индексом. Иногда мы хотим, чтобы DataFrame был в другой форме для целей презентации или для операций join
, merge
или groupby
. (Как вы отмечаете, объединение может также выполняться на основе значений столбцов, но объединение на основе индекса происходит быстрее.) За кулисами join
, merge
и groupby
используют, когда это возможно, быстрый поиск по индексу.
Временные ряды имеют методы resample
, asfreq
и interpolate
, чьи базовые реализации также используют быстрый поиск индексов.
Итак, в конце концов, я думаю, что начало индекса полезность, почему она проявляется во множестве функций, связана с ее способностью быстро выполнять хеш-поиск.