我有一个pandas系列对象,它包含10天的每小时时间序列数据:
import pandas as pd
import numpy as np
# create index first
datetimeindex = pd.date_range('1/1/2018', periods = 24*10, freq = 'H')
ps = pd.Series(np.random.randn(len(datetimeindex)), datetimeindex)
现在,我想从中创建不同的组。每组应包含连续两天的23:00:00至02:00:00之间的数据。这种分组将产生11组。我读了pandas.groupby()
,但我发现很难连续两天同时获取所需的数据。我该怎么办?
答案 0 :(得分:1)
我认为您首先按between_time
过滤时间,然后向groupby
移动一小时dictionary of DataFrame
:
a = ps.between_time('23:00:00', '02:00:00')
g = (a.index + pd.Timedelta(1, unit='h')).floor('d')
print (g)
DatetimeIndex(['2018-01-01', '2018-01-01', '2018-01-01', '2018-01-02',
'2018-01-02', '2018-01-02', '2018-01-02', '2018-01-03',
'2018-01-03', '2018-01-03', '2018-01-03', '2018-01-04',
'2018-01-04', '2018-01-04', '2018-01-04', '2018-01-05',
'2018-01-05', '2018-01-05', '2018-01-05', '2018-01-06',
'2018-01-06', '2018-01-06', '2018-01-06', '2018-01-07',
'2018-01-07', '2018-01-07', '2018-01-07', '2018-01-08',
'2018-01-08', '2018-01-08', '2018-01-08', '2018-01-09',
'2018-01-09', '2018-01-09', '2018-01-09', '2018-01-10',
'2018-01-10', '2018-01-10', '2018-01-10', '2018-01-11'],
dtype='datetime64[ns]', freq=None)
b = dict(tuple(a.groupby(g)))
print (len(b))
11
for i, x in a.groupby(g):
print (x)
2018-01-01 00:00:00 0.352758
2018-01-01 01:00:00 -1.013316
2018-01-01 02:00:00 0.068954
dtype: float64
2018-01-01 23:00:00 -1.248312
2018-01-02 00:00:00 -0.910815
2018-01-02 01:00:00 -0.564910
2018-01-02 02:00:00 -2.775819
dtype: float64
2018-01-02 23:00:00 0.637838
2018-01-03 00:00:00 0.678734
2018-01-03 01:00:00 -0.307417
2018-01-03 02:00:00 1.048184
dtype: float64
2018-01-03 23:00:00 0.004705
2018-01-04 00:00:00 -1.411631
2018-01-04 01:00:00 0.635552
2018-01-04 02:00:00 -0.328725
dtype: float64
2018-01-04 23:00:00 1.245582
2018-01-05 00:00:00 0.974894
2018-01-05 01:00:00 0.231007
2018-01-05 02:00:00 -0.678949
dtype: float64
2018-01-05 23:00:00 1.303643
2018-01-06 00:00:00 -2.161335
2018-01-06 01:00:00 -0.088469
2018-01-06 02:00:00 -0.880870
dtype: float64
2018-01-06 23:00:00 0.209398
2018-01-07 00:00:00 -0.756425
2018-01-07 01:00:00 0.800912
2018-01-07 02:00:00 0.057556
dtype: float64
2018-01-07 23:00:00 2.004828
2018-01-08 00:00:00 -2.521660
2018-01-08 01:00:00 -0.125366
2018-01-08 02:00:00 -1.023136
dtype: float64
2018-01-08 23:00:00 0.301093
2018-01-09 00:00:00 1.570089
2018-01-09 01:00:00 -1.578292
2018-01-09 02:00:00 0.758983
dtype: float64
2018-01-09 23:00:00 0.559790
2018-01-10 00:00:00 3.040507
2018-01-10 01:00:00 -0.574764
2018-01-10 02:00:00 -0.883358
dtype: float64
2018-01-10 23:00:00 -0.735663
dtype: float64