为什么在设置索引时使用 reset_index(drop=True) 快得多?

The*_*Cat 1 python indexing series pandas

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)
Run Code Online (Sandbox Code Playgroud)

P.T*_*ann 6

重置索引的代价高昂的操作不是创建新索引(如您所示,这是超快的),而是返回该系列的副本。如果比较:

%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)
Run Code Online (Sandbox Code Playgroud)

您可以看到就地操作(不返回副本)或多或少与您的方法一样快。然而,通常不鼓励执行就地操作。