Если вы имеете дело с серией типа DateTime, существует более эффективный способ их обрезать, особенно если в объекте серии много строк.
Вы можете использовать функцию floor
Например, если вы хотите сократить его до часов:
Генерация диапазона дат
times = pd.Series(pd.date_range(start='1/1/2018 04:00:00', end='1/1/2018 22:00:00', freq='s'))
Мы можем проверить это, сравнивая время работы между функциями замены и пола.
%timeit times.apply(lambda x : x.replace(minute=0, second=0, microsecond=0))
>>> 341 ms ± 18.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit times.dt.floor('h')
>>>>2.26 ms ± 451 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)