python - 在 pandas DataFrame/Series 中快速选择时间间隔

标签 python indexing pandas

我的问题是我想过滤 DataFrame 以仅包含 [start, end) 区间内的时间。如果不关心这一天,我只想过滤每天的开始和结束时间。我有一个解决方案,但它很慢。所以我的问题是是否有更快的方法来进行基于时间的过滤。

例子

import pandas as pd
import time


index=pd.date_range(start='2012-11-05 01:00:00', end='2012-11-05 23:00:00', freq='1S').tz_localize('UTC')
df=pd.DataFrame(range(len(index)), index=index, columns=['Number'])

# select from 1 to 2 am, include day
now=time.time()
df2=df.ix['2012-11-05 01:00:00':'2012-11-05 02:00:00']
print 'Took %s seconds' %(time.time()-now) #0.0368609428406

# select from 1 to 2 am, for every day
now=time.time()
selector=(df.index.hour>=1) & (df.index.hour<2)
df3=df[selector]
print 'Took %s seconds' %(time.time()-now) #Took  0.0699911117554

如您所见,如果我删除日期(第二种情况),它几乎需要两倍的时间。如果我有许多不同的日子,例如从 11 月 5 日到 7 日,计算时间会迅速增加:

index=pd.date_range(start='2012-11-05 01:00:00', end='2012-11-07 23:00:00', freq='1S').tz_localize('UTC')

那么,总而言之,有没有一种更快的方法可以跨多天按一天中的时间进行过滤?

谢谢

最佳答案

你需要 between_time 方法。

In [14]: %timeit df.between_time(start_time='01:00', end_time='02:00')
100 loops, best of 3: 10.2 ms per loop

In [15]: %timeit selector=(df.index.hour>=1) & (df.index.hour<2); df[selector]
100 loops, best of 3: 18.2 ms per loop

我以 11 月 5 日至 7 日为索引进行了这些测试。

文档

Definition: df.between_time(self, start_time, end_time, include_start=True, include_end=True)
Docstring:
Select values between particular times of the day (e.g., 9:00-9:30 AM)

Parameters
----------
start_time : datetime.time or string
end_time : datetime.time or string
include_start : boolean, default True
include_end : boolean, default True

Returns
-------
values_between_time : type of caller

关于python - 在 pandas DataFrame/Series 中快速选择时间间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21512042/

相关文章:

python - Pandas groupby 可变时间间隔

python - 制作一个名称只有在程序运行后才知道的列表

python - 从 Python Flask 中的链接获取信息

python - 在 Python 中乘以字符串时使用 sep

c# - access sql 创建前检查索引是否存在

mongodb - 是否应该为确定大小的小 mongo 集合创建索引?

python - Panda 对数据框的数值操作(即 max())

python - 重采样后合并 pandas DataFrame

MySQL索引设计与表分区

python - 从数据框的每个值创建列名和最后一个值的元组