如何按定义的时间间隔对pandas数据帧进行分组?

时间:2017-02-15 16:52:32

标签: python pandas datetime group-by

我有这样的dataFrame,我想每60分钟分组一次,并在06:30开始分组。

                           data
index
2017-02-14 06:29:57    11198648
2017-02-14 06:30:01    11198650
2017-02-14 06:37:22    11198706
2017-02-14 23:11:13    11207728
2017-02-14 23:21:43    11207774
2017-02-14 23:22:36    11207776

我正在使用:

df.groupby(pd.TimeGrouper(freq='60Min'))

我得到了这个分组:

                      data
index       
2017-02-14 06:00:00     x1
2017-02-14 07:00:00     x2
2017-02-14 08:00:00     x3
2017-02-14 09:00:00     x4
2017-02-14 10:00:00     x5

但我正在寻找这个结果:

                      data
index       
2017-02-14 06:30:00     x1
2017-02-14 07:30:00     x2
2017-02-14 08:30:00     x3
2017-02-14 09:30:00     x4
2017-02-14 10:30:00     x5

如何告诉该功能每隔6小时开始分组一次?

如果 .groupby(pd.TimeGrouper(freq = '60Min'))无法完成,那么最好的方法是什么?

致敬并非常感谢

2 个答案:

答案 0 :(得分:13)

base=30pd.Grouper中的label='right'参数结合使用。

指定label='right'会使时间段从6:30(较高侧)开始分组,而不是5:30。 此外,base设置为0 by default,因此需要将这些偏移30以说明日期的向前传播。

假设您希望聚合每个子组的第一个元素,那么:

df.groupby(pd.TimeGrouper(freq='60Min', base=30, label='right')).first()
# same thing using resample - df.resample('60Min', base=30, label='right').first()

的产率:

                           data
index                          
2017-02-14 06:30:00  11198648.0
2017-02-14 07:30:00  11198650.0
2017-02-14 08:30:00         NaN
2017-02-14 09:30:00         NaN
2017-02-14 10:30:00         NaN
2017-02-14 11:30:00         NaN
2017-02-14 12:30:00         NaN
2017-02-14 13:30:00         NaN
2017-02-14 14:30:00         NaN
2017-02-14 15:30:00         NaN
2017-02-14 16:30:00         NaN
2017-02-14 17:30:00         NaN
2017-02-14 18:30:00         NaN
2017-02-14 19:30:00         NaN
2017-02-14 20:30:00         NaN
2017-02-14 21:30:00         NaN
2017-02-14 22:30:00         NaN
2017-02-14 23:30:00  11207728.0

答案 1 :(得分:4)

使用DataFrame.resample(这是一种用于重新采样时间序列的专用方法),这样我们就不需要android:exported=DataFrame.GroupBy

pd.Grouper

输出

df.resample('60min', base=30, label='right').first()

通知:当数据框中有多个列时,必须指定要在其上聚合的列:

                           data
index                          
2017-02-14 06:30:00  11198648.0
2017-02-14 07:30:00  11198650.0
2017-02-14 08:30:00         NaN
2017-02-14 09:30:00         NaN
2017-02-14 10:30:00         NaN
2017-02-14 11:30:00         NaN
2017-02-14 12:30:00         NaN
2017-02-14 13:30:00         NaN
2017-02-14 14:30:00         NaN
2017-02-14 15:30:00         NaN
2017-02-14 16:30:00         NaN
2017-02-14 17:30:00         NaN
2017-02-14 18:30:00         NaN
2017-02-14 19:30:00         NaN
2017-02-14 20:30:00         NaN
2017-02-14 21:30:00         NaN
2017-02-14 22:30:00         NaN
2017-02-14 23:30:00  11207728.0