2016-09-16 5 views
2

次のコードを使用して、H1_highおよびH1_low列のデータのローリングハイおよびローをキャプチャできます。pd.rolling_maxおよびmin(groupbyなど)

daystart = '9:30' 
IB_end = '10:29:59' 

IB_session = data.between_time(daystart,IB_end, include_start=True, include_end=True) 

とでこれを行う:私がやりたい何

    Open High Low Last Volume H1_high H1_low 
Timestamp       
2014-03-04 09:30:00 1783.50 1784.50 1783.50 1784.50 171 1784.50 1783.5 
2014-03-04 09:31:00 1784.75 1785.75 1784.50 1785.25 28 1785.75 1783.5 
2014-03-04 09:32:00 1785.00 1786.50 1785.00 1786.50 81 1786.50 1783.5 
2014-03-04 09:33:00 1786.00 1786.00 1785.25 1785.25 41 1786.50 1783.5 
2014-03-04 09:34:00 1785.00 1785.25 1784.75 1785.25 11 1786.50 1783.5 
2014-03-04 09:35:00 1785.50 1786.75 1785.50 1785.75 49 1786.75 1783.5 
2014-03-04 09:36:00 1786.00 1786.00 1785.25 1785.75 12 1786.75 1783.5 
2014-03-04 09:37:00 1786.00 1786.25 1785.25 1785.25 15 1786.75 1783.5 

は以下の時間の間H1_highH1_lowをキャプチャするだけです:

data["H1_high"] = pd.rolling_max(data.High, window=60, min_periods=1) 
data["H1_low"] = pd.rolling_min(data.Low, window=60, min_periods=1) 

この

は、次のような出力を提供します H1_highH1_lowを表示し、最後の値をから順に(FFill)繰り上げて表示します3210日の終わり(16:14:00)。だからここ

H1_highH1_low列に対する所望の出力です:10:29:59から

    H1_high H1_low 
2014-03-04 10:29:00 1786.75 1783.5 
2014-03-04 10:30:00 1786.75 1783.5 
2014-03-04 10:31:00 1786.75 1783.5 

最終値は、一日の終わりまで前方いっぱい:

    H1_high H1_low 
2014-03-04 16:14:00 1786.75 1783.5 

その後、新しい一日が新鮮な値で再び開始します。

    H1_high H1_low 
2014-03-05 09:30:00 1788.00 1783.00 
+0

をフィルタリングする日が再び起動すると、あなたはロールは前日からの情報を含めるようにしたいですか?そうでない場合は、適切なデータ(60分分)があるときにのみロールを開始します。つまり、ローリングデータは10:30に開始されますか? – piRSquared

+0

こんにちは@piRSquared。前日からのロールはありません。私が望むデータは最初の1時間からのもので、毎日9時30分に即座に開始します。 – ade1e

+0

基本的には、1日のうちの1時間(9:30〜10:30)の高低です。毎日リフレッシュします。私は10時29分の価値が残りの日のために前方に満たすことを望みます。 – ade1e

答えて

0

01を使用とあなたのインデックス

import datetime 

high_low_xt = lambda df: pd.concat([df.High.cummax(), df.Low.cummin()], axis=1) 
tidx = pd.date_range('2016-09-14', '2016-09-16', freq='T') 

start = datetime.time(9, 30) 
end = datetime.time(10, 30) 
eod = datetime.time(18, 14) 

bidx = tidx[(tidx.time >= start) & (tidx.time < end)] 
didx = tidx[(tidx.time >= start) & (tidx.time <= eod)] 

df = pd.DataFrame(np.random.rand(len(tidx), 2), tidx, ['High', 'Low']) 
df1 = df.ix[bidx].groupby(pd.TimeGrouper('D')).apply(high_low_xt) 

df1.reindex(didx, method='ffill') 

enter image description here

+0

これは静的な毎日の出力を与えるだけでなく、ですか?私は上記の10:29の価値が残りの日のために補充する必要があると述べました。私はこれを日中のデータセットとして保持し、毎日リサンプルしないでください。 – ade1e

+0

ありがとう@piRSquared。しかし最初の1時間では高低変化はありますが、この期間中は静的出力を与えるコードですか? FFillは10時30分後にのみ発生します。それまでは値は変化しています。 – ade1e

+0

@adele at 10:01、あなたはその点まで最大を望みますか? – piRSquared

関連する問題