我有两个系列的熊猫数据框。一个是分钟级别的日期时间和浮动。假设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
答案 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()找到的那些。