.resample
немного подстановочный знак.С datetime64[ns]
и timedelta64[ns]
он ведет себя довольно по-разному, поэтому лично я считаю более надежным работать с groupby
, когда просто выполняю такие операции, как .sum
или .first
.
Пример данных
import pandas as pd
import numpy as np
n = 1000
np.random.seed(123)
df = pd.DataFrame({'time': pd.date_range('2018-01-01 01:13:43', '2018-01-01 23:59:59', periods=n),
'abc': np.random.randint(1,1000,n)})
Когда dtype
равен datetime64[ns]
, он будет выполнять повторную выборку в "округленные" ячейки:
df.dtypes
#time datetime64[ns]
#abc int32
#dtype: object
df.set_index('time').resample('600S').sum()
abc
time
2018-01-01 01:10:00 2572
2018-01-01 01:20:00 2257
2018-01-01 01:30:00 2470
2018-01-01 01:40:00 3131
2018-01-01 01:50:00 3402
При timedelta64[ns]
вместо этого он начинает ячейки на основе вашего первого наблюдения:
df['time'] = pd.to_timedelta(df.time.dt.time.astype('str'))
df.dtypes
#time timedelta64[ns]
#abc int32
#dtype: object
df.set_index('time').resample('600S').sum()
abc
time
01:13:43 3432
01:23:43 2447
01:33:43 2588
01:43:43 3202
01:53:43 2547
Так что в случае столбца timedelta64[ns]
я бы посоветовал вам пойти с groupby
, создавая ячейки из .dt.floor
, чтобы создать ваши 10-минутные ячейки, которые идут от [XX:00:00 - XX:10:00]
df.groupby(df.time.dt.floor('600S')).sum()
# abc
#time
#01:10:00 2572
#01:20:00 2257
#01:30:00 2470
#01:40:00 3131
#01:50:00 3402
Это тот же результат, который мы получили в первом случае с типом datetime64[ns]
d, который связан с "круглыми" ячейками.