2015-09-17 14 views
5

Tôi muốn nhận giá trị 07h00 mỗi ngày, từ DataFrame nhiều ngày có dữ liệu 24 giờ trong mỗi ngày.Truy vấn cùng một giá trị thời gian mỗi ngày trong Pandas timeseries

import numpy as np 
import pandas as pd 

aframe = pd.DataFrame([np.arange(10000), np.arange(10000) * 2]).T 
aframe.index = pd.date_range("2015-09-01", periods = 10000, freq = "1min") 

aframe.head() 
Out[174]: 
        0 1 
2015-09-01 00:00:00 0 0 
2015-09-01 00:01:00 1 2 
2015-09-01 00:02:00 2 4 
2015-09-01 00:03:00 3 6 
2015-09-01 00:04:00 4 8 

aframe.tail() 
Out[175]: 
         0  1 
2015-09-07 22:35:00 9995 19990 
2015-09-07 22:36:00 9996 19992 
2015-09-07 22:37:00 9997 19994 
2015-09-07 22:38:00 9998 19996 
2015-09-07 22:39:00 9999 19998 

Trong 10 000 hàng DataFrame này kéo dài 7 ngày, làm cách nào tôi có được giá trị 7am mỗi ngày hiệu quả nhất có thể? Giả sử tôi có thể phải làm điều này cho cơ sở dữ liệu đánh dấu rất lớn vì vậy tôi đánh giá cao tốc độ và sử dụng bộ nhớ thấp.

Tôi biết tôi có thể chỉ số với chuỗi như:

aframe.ix["2015-09-02 07:00:00"] 
Out[176]: 
0 1860 
1 3720 
Name: 2015-09-02 07:00:00, dtype: int64 

Nhưng những gì tôi cần là cơ bản một truy vấn kiểu ký tự đại diện ví dụ

aframe.ix["* 07:00:00"] 

Trả lời

5

Bạn có thể sử dụng indexer_at_time:

>>> locs = aframe.index.indexer_at_time('7:00:00') 
>>> aframe.iloc[locs] 
         0  1 
2015-09-01 07:00:00 420 840 
2015-09-02 07:00:00 1860 3720 
2015-09-03 07:00:00 3300 6600 
2015-09-04 07:00:00 4740 9480 
2015-09-05 07:00:00 6180 12360 
2015-09-06 07:00:00 7620 15240 
2015-09-07 07:00:00 9060 18120 

Ngoài ra còn có indexer_between_time nếu bạn cần chọn tất cả chỉ mục nằm giữa tw o thời gian cụ thể trong ngày.

Cả hai phương thức này đều trả về các vị trí số nguyên của các giá trị mong muốn; các hàng tương ứng của Series hoặc DataFrame có thể được tìm nạp với iloc, như được hiển thị ở trên.

Các vấn đề liên quan