如何从时间戳范围为

时间:2018-03-10 11:24:16

标签: python python-3.x pandas pandas-groupby

我有一个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(),但我发现很难连续两天同时获取所需的数据。我该怎么办?

1 个答案:

答案 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