2017-01-06 7 views
0

私は、日、時間、オープン、ハイ、ロー、クローズ、ボリュームcol_headings分在庫データを持っています。 n番目の行(この例では3行ごと)ごとに再サンプリングする必要がありますが、複数の列に異なるパラメータがあります。私が持っているコードは、これまでのところです:各列の異なるパラメータを持つn番目の行ごとにパンダのDataFrameをリサンプリングしますか?

import pandas as pd 
import numpy as np 

spy = pd.read_csv("C:\\Users\\PC\\Desktop\\spy_test.csv") 

#Sample for every n minutes 
n = 3 
b = n-1 


spy_date = pd.DataFrame(spy['Date']) 
date = spy_date.iloc[b::n, :] 

spy_time = pd.DataFrame(spy['Time']) 
time = spy_time.iloc[b::n, :] 
time = time.reset_index(drop=True) 
spy_open = pd.DataFrame(spy['Open']) 
open = spy_open.iloc[::n, :] 
open = open.reset_index(drop=True) 

spy_high = pd.DataFrame(spy['High']) 
high_s = spy_high.iloc[::n, :].max() 
high = pd.DataFrame(high_s) 
high = high.reset_index(drop=True) 

spy_low = pd.DataFrame(spy['Low']) 
low_s = spy_low.iloc[::n, :].min() 
low = pd.DataFrame(low_s) 
low = low.reset_index(drop=True) 

spy_close = pd.DataFrame(spy['Close']) 
close = spy_close.iloc[::n, :] 
close = close.reset_index(drop=True) 

spy_volume = pd.DataFrame(spy['Volume']) 
volume_s = spy_volume.iloc[n::3, :].sum() 
volume = pd.DataFrame(volume_s) 
volume = volume.reset_index(drop=True) 

joined = [date, time, open, high, low, close, volume] 

result = pd.concat(joined, axis=1) 
result.columns = ['Date', 'Time', 'Open', 'High', 'Low', 'Close', 'Volume'] 

print(result) 

このコードは、高、低、およびボリュームの列は、単一の値を返したことを除いて働きました。私が各3分ブロックの最大/最小/合計を望むところでは、列全体の高/低/合計を返しました。

また、初心者が多かれ少なかれ分かりやすいと思いますが、私はすべて耳にします。私は数週間しかコーディングしていないので、私は何をしているのか分からない。

注:私はqcutの使用を検討しましたが、私が先に知りたいビンの数を把握する必要があります。同じ基本フォーマットでさまざまなデータセットを実行するので、理想的ではないように思えました。

答えて

1

軍事的な時間があるので、次のようにしてtimedeltaに変換してください。また、整数を持つので先頭にゼロを追加する必要があります。私はこれをzfillとしました。

df['Time'] = pd.to_timedelta(pd.to_datetime(df.Time.map(lambda x: str(x).zfill(4)),format='%H%M').dt.time.astype(str)) 
df.set_index('Time').groupby(['Date', pd.Timegrouper('3T')]).agg({'Open':'last', 'High':'max', 'Low':'min', 'Close':'last','Volume':'sum'}) 
+0

私はこの応答をお寄せいただきありがとうございます。 –

+0

これが返されました: TypeError:DatetimeIndex、TimedeltaIndexまたはPeriodIndexでのみ有効ですが、 'Int64Index'のインスタンスがあります 元のファイルには日付と時刻が別の列に表示されます。私はそれが来るようにパンダに日付を解析させることができますが、正確な日時インデックスを作るために時間を解析したり、それを日付列に追加することはできません。時間は930 = 9:30の軍事フォーマットで表示されます –

+0

「時間」列をtimedelta型にする必要があります。 'df ['Time'] = pd.to_timedelta(df ['Time'])' –

関連する問題