我有一个时间序列,我想分组到time periods of the day
。按小时分组很容易:
times = pd.DatetimeIndex(df[datetime_field])
grouped = df.groupby([times.hour])
现在我想分组任意数分钟:
times = pd.DatetimeIndex(df[datetime_field])
grouped = df.groupby(['15M'])
我很高兴看到TimeGrouper
课程会接受15M
,但我不希望时间序列重新采样为15分钟,我希望它分组在&# 39;一天的时间'箱子大小为15分钟。
我可以添加minute_of_day
字段,然后使用pd.cut
进行分组,但这很慢并且会复制数据。
非常感谢任何提示。
答案 0 :(得分:1)
实现这一目标的一种方式(很多):
df.groupby([df.ts.dt.date, df.ts.dt.hour, df.ts.dt.minute//15])
说明:
In [52]: df = pd.DataFrame({'ts':pd.date_range('2016-01-01', freq='1min', periods=10000), 'col': np.random.randint(0,100, len(times))})
In [53]: df.head(10)
Out[53]:
col ts
0 87 2016-01-01 00:00:00
1 89 2016-01-01 00:01:00
2 82 2016-01-01 00:02:00
3 37 2016-01-01 00:03:00
4 80 2016-01-01 00:04:00
5 24 2016-01-01 00:05:00
6 14 2016-01-01 00:06:00
7 32 2016-01-01 00:07:00
8 63 2016-01-01 00:08:00
9 81 2016-01-01 00:09:00
In [56]: df.groupby([df.ts.dt.date, df.ts.dt.hour, df.ts.dt.minute//15]).sum().head(20)
Out[56]:
col
ts ts ts
2016-01-01 0 0 848
1 716
2 970
3 767
1 0 806
1 760
2 745
3 678
2 0 783
1 722
2 798
3 713
3 0 589
1 773
2 667
3 796
4 0 760
1 735
2 846
3 660