【发布时间】:2017-08-23 12:19:49
【问题描述】:
我经常使用 DatetimeIndex.date,尤其是在 groupby 方法中。但是,与 DatetimeIndex.year/month/day 相比,DatetimeIndex.date 速度较慢。据我了解,这是因为 .date 属性与索引上的 lambda 函数一起使用并返回日期时间有序索引,而 index.year/month/day 仅返回整数索引。我做了一个小示例函数,它的性能更好一些,并且会加快我的一些代码(至少对于在 groupby 中查找值),但我觉得必须有更好的方法:
In [217]: index = pd.date_range('2011-01-01', periods=100000, freq='h')
In [218]: data = np.random.rand(len(index))
In [219]: df = pd.DataFrame({'data':data},index)
In [220]: def func(df):
...: groupby = df.groupby([df.index.year, df.index.month, df.index.day]).mean()
...: index = pd.date_range(df.index[0], periods = len(groupby), freq='D')
...: groupby.index = index
...: return groupby
...:
In [221]: df.groupby(df.index.date).mean().equals(func(df))
Out[221]: True
In [222]: df.groupby(df.index.date).mean().index.equals(func(df).index)
Out[222]: True
In [223]: %timeit df.groupby(df.index.date).mean()
1 loop, best of 3: 1.32 s per loop
In [224]: %timeit func(df)
10 loops, best of 3: 89.2 ms per loop
pandas/index 是否有我没有找到的类似功能?
【问题讨论】:
标签: python pandas datetime indexing