FWIW, я вижу похожие цифры на моей машине
%timeit d1 = com_ser.groupby("Date").diff()
523 ms ± 32.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit d2 = com_ser - com_ser.groupby("Date").shift()
80.8 ms ± 2.31 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Реализация Pandas diff()
кажется медленной с groupby()
Например, если я сделаю одну большую серию
big_ser = pd.Series(np.random.randn(int(1e7)))
затем сравните сдвиг и вычтите с Series.diff()
%timeit big_ser - big_ser.shift()
46.3 ms ± 789 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit big_ser.diff()
41.6 ms ± 488 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
Тогда времена между реализациями идентичны. Это следует, когда вы посмотрите внутренний исходный код для Series.diff
, который явно указан в комментариях
def diff(arr, n, axis=0):
"""
difference of n between self,
analogous to s-s.shift(n)
Так что я думаю, что это должно быть немного в groupby
, специфичном для diff()