如何使用pandas将时间序列分组10分钟?

时间:2015-08-21 18:35:21

标签: python pandas

有一个由DatatimeIndex索引的时间序列(ts),想要将它分组10分钟

index   x  y  z

ts1     ....
ts2     ....
...

我知道如何分组1分钟

def group_by_minute(timestamp):
    year = timestamp.year
    month = timestamp.month
    day = timestamp.day
    hour = timestamp.hour
    minute = timestamp.minute
    return datetime.datetime(year, month, day, hour, minute)

然后

ts.groupby(group_by_minute, axis=0)

我的自定义功能(大致)

def my_function(group):
    first_latitude = group['latitude'].sort_index().head(1).values[0]
    last_longitude = group['longitude'].sort_index().tail(1).values[0]
    return first_latitude - last_longitude

所以ts DataFrame绝对应该包含'纬度'和经度'列

使用TimeGrouper时

   ts.groupby(pd.TimeGrouper(freq='100min')).apply(my_function)

我收到了以下错误,

TypeError: cannot concatenate a non-NDFrame object

2 个答案:

答案 0 :(得分:14)

这种事情有一个pandas.TimeGrouper,你所描述的会是这样的:

agg_10m = df.groupby(pd.TimeGrouper(freq='10Min')).aggregate(numpy.sum) #or other function

答案 1 :(得分:6)

我知道这已经过时了但是pd.Grouper()也会实现这个目标:

agg_10m = df.groupby(pd.Grouper(freq='10Min')).aggregate(numpy.sum)