2015-09-17 17 views
5

毎日24時間分のデータを持つmultiday DataFrameから、毎日07h00の値を取得したいと考えています。パンダの時系列で毎日同じ時刻の値をクエリ

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 

この10 000行のDataFrameで7日間にわたり、毎日7amの値をできるだけ効率的に取得するにはどうすればよいでしょうか?非常に大きなティックデータベースに対してこれを行う必要があるかもしれないと仮定して、私はスピードとメモリ使用量を高く評価します。

私は私ができるような文字列を使用して索引を知っている:

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

をしかし、私は必要なことはあなたがindexer_at_timeを使用することができます基本的に例

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

答えて

5

のためのワイルドカードスタイルのクエリです:

>>> 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 

twの間にあるすべてのインデックスを選択する必要がある場合は、indexer_between_timeもありますo特定の時刻。

これらのメソッドはどちらも、目的の値の整数位置を返します。上記のように、SeriesまたはDataFrameの対応する行をilocで取得できます。

関連する問題