如何在N个观察的大熊猫中进行分组

时间:2014-05-08 08:03:15

标签: python pandas

我有两个系列的熊猫数据框。一个是分钟级别的日期时间和浮动。假设1000次观察,即1000分钟。从最后一个日期时间起,我需要以15分钟为间隔的浮点数的总和进行一组。所以..这是为了做一个滚动小组。再添加一分钟......需要在最后15分钟内重做小组。

执行此操作的最pythonic方法是什么?例如,如果观察到的最后一次是12:17:00,则从12:02:00到12:17:00进行分组

...
...
11:46:00 to 12:01:00
12:02:00 to 12:17:00


import pandas as pd
import datetime
from datetime import timedelta


dt = "2014-05-05 17:01:00"
dt = datetime.datetime.strptime(dt,"%Y-%m-%d %H:%M:00")
datetime
hash_list = []
for i in xrange(35):
    now = dt + timedelta(minutes=i+1)
    temp = {"date": now, "exr": 1}
    hash_list.append(temp)
df = pd.DataFrame(hash_list)
df = df.set_index('date')

以上将创造35个观察。

无论当前分钟如何,

总和应该是这样的

2014-05-05 17:06:00   5
2014-05-05 17:21:00   15
2014-05-05 17:36:00   15

2 个答案:

答案 0 :(得分:3)

我有点不清楚你对“滚动组”的意思是什么。对我来说,滚动表明组的时间跨度重叠,这不是您在示例中显示的内容。那么什么在这里滚动?

您可以使用Pandas Timegrouper对15分钟的块进行分组。如果您的DataFrame(df)具有时间戳作为索引,则使用:

df.groupby(pd.TimeGrouper(freq='15Min', base=df.index[-1].minute)).sum()

这将为每个15分钟的块提供总和,其中块由索引中的最后一个时间戳定义。

编辑:

您可以使用“关闭”更改块的定义。和'标签':

df.groupby(pd.TimeGrouper(freq='15Min', base=df.index[-1].minute, closed='right', label='right')).sum()

答案 1 :(得分:0)

我不确定你为什么要这样分组。通常,groupby()会为您提供由一个属性统一的多个组。但是,您只需要一个组,即包含最新15分钟的组。您可以使用truncate()找到的那些。