按小时/分钟/.. 属性而不是.time
. 这是 Jeff 的基线:
In [11]: %timeit all_data.groupby(all_data.index.time).mean()
1 loops, best of 3: 202 ms per loop
并且没有时间它会更快(属性越少越快):
In [12]: %timeit all_data.groupby(all_data.index.hour).mean()
100 loops, best of 3: 5.53 ms per loop
In [13]: %timeit all_data.groupby([all_data.index.hour, all_data.index.minute, all_data.index.second, all_data.index.microsecond]).mean()
10 loops, best of 3: 20.8 ms per loop
注意:时间对象不接受纳秒(但这是 DatetimeIndex 的分辨率)。
我们可能应该将索引转换为具有时间对象以使比较公平:
In [21]: res = all_data.groupby([all_data.index.hour, all_data.index.minute, all_data.index.second, all_data.index.microsecond]).mean()
In [22]: %timeit res.index.map(lambda t: datetime.time(*t))
1000 loops, best of 3: 1.39 ms per loop
In [23]: res.index = res.index.map(lambda t: datetime.time(*t))
因此,对于最大分辨率,它的速度大约快 10 倍,您可以轻松地使其更粗糙(更快),例如按小时和分钟分组..