const можно использовать только в файле .ts

Как и 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, чьи базовые реализации также используют быстрый поиск индексов.

Итак, в конце концов, я думаю, что начало индекса полезность, почему она проявляется во множестве функций, связана с ее способностью быстро выполнять хеш-поиск.

17
задан Anuj Dahiya 28 August 2017 в 10:56
поделиться