为什么我会使用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)
答案 0 :(得分:4)
重置索引的代价高昂的操作不是创建新索引(如您所示,这是超快),而是返回该系列的副本。如果你比较:
%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)
您可以看到inplace操作(没有返回副本)或多或少与您的方法一样快。但是,执行就地操作是generally discouraged。