Дорогая операция при сбросе индекса не в том, чтобы создать новый индекс (как вы показали, это очень быстро), а в том, чтобы вернуть копию серии. Если сравнивать:
%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)
Вы можете видеть, что операция на месте (где копия не возвращается) более или менее одинаково быстра по сравнению с вашим методом. Однако обычно не рекомендуется выполнять операции на месте.