2017-02-15 126 views
2

我有一个这样的数据框,我想每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点半开始分组tervals?

如果不能通过.groupby完成(pd.TimeGrouper(freq ='60Min')),那么最好的方法是怎么做到的呢?

致敬和感谢提前

回答

7

使用base=30结合非常符合在pd.Grouperlabel='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 
+0

为什么会出现在熊猫这个功能没有文件?有没有办法看到pd.TimeGrouper函数的代码?我记得在R中,你可以看到代码写入没有括号的函数名称,在python中是否有类似的东西? – EduardoRL

+0

[pd.TimeGrouper'的完整代码](https://github.com/pandas-dev/pandas/blob/v0.19.2/pandas/core/groupby.py#L156-L312)。它从[resample'的完整代码]继承了一些'** kwargs'(https://github.com/pandas-dev/pandas/blob/v0.19.2/pandas/core/generic.py#L4068- L4216)也是如此(例如:'base')。 –

+0

如果你在Jupyter上,'help(pd.TimeGrouper)'也会给你一个关于它的用法,数据描述符,允许的参数,定义的方法等的简短描述。 –