Зачем использовать reset_index (drop = True), когда установка индекса происходит намного быстрее? - PullRequest
0 голосов
/ 09 мая 2018

Зачем мне использовать reset_index(drop=True), когда альтернатива намного быстрее? Я уверен, что что-то мне не хватает. (Или мои времена как-то плохи ...)

import pandas as pd

l = pd.Series(range(int(1e7)))

%timeit l.reset_index(drop=True)
# 35.9 ms +- 1.29 ms per loop (mean +- std. dev. of 7 runs, 10 loops each)

%timeit l.index = range(int(1e7))
# 13 us +- 455 ns per loop (mean +- std. dev. of 7 runs, 100000 loops each)

1 Ответ

0 голосов
/ 09 мая 2018

Дорогая операция при сбросе индекса не в том, чтобы создать новый индекс (как вы показали, это очень быстро), а в том, чтобы вернуть копию серии. Если сравнивать:

%timeit l.reset_index(drop=True)
22.6 ms ± 172 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit l.index = range(int(1e7))
14.7 µs ± 348 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit l.reset_index(inplace=True, drop=True)
13.7 µs ± 121 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

Вы можете видеть, что операция на месте (где копия не возвращается) более или менее одинаково быстра по сравнению с вашим методом. Однако обычно не рекомендуется выполнять операции на месте.

...