有效地将pandas日期时间索引切片特定时间

gra*_*ham 6 python pandas

获取具有特定时间的数据帧的所有行的最有效方法是什么?例如,如果我创建以下DataFrame,

df = DataFrame(index=pd.date_range('2010-01-01', '2016-04-01',freq='min'))
Run Code Online (Sandbox Code Playgroud)

然后尝试在下午3点的时间内获取所有行:

%timeit df[df.index.time == time(15,0)]
1 loops, best of 3: 9.29 s per loop
Run Code Online (Sandbox Code Playgroud)

它工作但很慢.

那么,在两个特定时间之间有效切片呢?

%timeit df[(df.index.time >= time(15,0)) & (df.index.time <= time(16,0))]
1 loops, best of 3: 18.7 s per loop
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 10

你可以使用at_timebetween_time:

print df.at_time('15:00')

print df.between_time(start_time='15:00', end_time='16:00')
Run Code Online (Sandbox Code Playgroud)


Max*_*axU 6

试试这个:

df.loc[df.index.hour == 15]
Run Code Online (Sandbox Code Playgroud)