更快的方式来组合熊猫的时间

joe*_*415 5 python time datetime group-by pandas

我有几天1分钟数据的时间序列,并且希望在一天中的所有日期对其进行平均.

这很慢:

from datetime import datetime
from pandas import date_range, Series
time_ind = date_range(datetime(2013, 1, 1), datetime(2013, 1, 10), freq='1min')
all_data = Series(randn(len(time_ind)), time_ind)
time_mean = all_data.groupby(lambda x: x.time()).mean()
Run Code Online (Sandbox Code Playgroud)

运行差不多一分钟!

虽然像:

time_mean = all_data.groupby(lambda x: x.minute).mean()
Run Code Online (Sandbox Code Playgroud)

只需要几分之一秒.

是否有更快的方式按时间分组?

知道为什么这么慢吗?

bmu*_*bmu 3

您的“lambda-version”和版本 0.11中引入的 time 属性在版本 0.11.0 中似乎都很慢:

In [4]: %timeit all_data.groupby(all_data.index.time).mean()
1 loops, best of 3: 11.8 s per loop

In [5]: %timeit all_data.groupby(lambda x: x.time()).mean()
Exception RuntimeError: 'maximum recursion depth exceeded while calling a Python object' in <type 'exceptions.RuntimeError'> ignored
Exception RuntimeError: 'maximum recursion depth exceeded while calling a Python object' in <type 'exceptions.RuntimeError'> ignored
Exception RuntimeError: 'maximum recursion depth exceeded while calling a Python object' in <type 'exceptions.RuntimeError'> ignored
1 loops, best of 3: 11.8 s per loop
Run Code Online (Sandbox Code Playgroud)

使用当前的 master,这两种方法都快得多:

In [1]: pd.version.version
Out[1]: '0.11.1.dev-06cd915'

In [5]: %timeit all_data.groupby(lambda x: x.time()).mean()
1 loops, best of 3: 215 ms per loop

In [6]: %timeit all_data.groupby(all_data.index.time).mean()
10 loops, best of 3: 113 ms per loop
'0.11.1.dev-06cd915'
Run Code Online (Sandbox Code Playgroud)

因此,您可以更新到 master,或者等待本月发布的 0.11.1。