Pandas按时间分组,指定的开始时间为非整数分钟

Luc*_*rio 3 python grouping group-by pandas pandas-groupby

我有一个带有一小时信号的数据帧.我想在10分钟内将它们分组.问题是起始时间并不恰好是10分钟的"倍数",因此,我获得了7个,第一个和最后一个不完整,而不是获得6个组.

这个问题很容易重现

import pandas as pd
import numpy as np
import datetime as dt

rng = pd.date_range('1/1/2011 00:05:30', periods=3600, freq='1S')
ts = pd.DataFrame({'a':np.random.randn(len(rng)),'b':np.random.randn(len(rng))}, index=rng)

interval = dt.timedelta(minutes=10)

ts.groupby(pd.Grouper(freq=interval)).apply(len)

2011-01-01 00:00:00    270
2011-01-01 00:10:00    600
2011-01-01 00:20:00    600
2011-01-01 00:30:00    600
2011-01-01 00:40:00    600
2011-01-01 00:50:00    600
2011-01-01 01:00:00    330
Freq: 10T, dtype: int64
Run Code Online (Sandbox Code Playgroud)

我试着像这里描述的那样解决它,但base只需要整数分钟.对于上面的示例(从00:05之后的30秒开始),下面的代码仍然不起作用

ts.groupby(pd.Grouper(freq=interval, base=ts.index[0].minute)).apply(len)
Run Code Online (Sandbox Code Playgroud)

如何设置Grouper的通用开始时间?我的预期产量是

2011-01-01 00:05:30    600
2011-01-01 00:15:30    600
2011-01-01 00:25:30    600
2011-01-01 00:35:30    600
2011-01-01 00:45:30    600
2011-01-01 00:55:30    600
Run Code Online (Sandbox Code Playgroud)

cs9*_*s95 5

base接受浮点参数.除了会议记录,您还必须考虑秒数.

base = ts.index[0].minute + ts.index[0].second/60
ts.groupby(pd.Grouper(freq=interval, base=base)).size()

2011-01-01 00:05:30    600
2011-01-01 00:15:30    600
2011-01-01 00:25:30    600
2011-01-01 00:35:30    600
2011-01-01 00:45:30    600
2011-01-01 00:55:30    600
Freq: 10T, dtype: int64
Run Code Online (Sandbox Code Playgroud)