次のような株式の 1 分間のデータがあります。
bidopen bidhigh bidlow bidclose bidvolume
currencypair
2007-03-30 16:01:00 1.9687 1.96900 1.9686 1.9686 877.40
2007-03-30 16:02:00 1.9686 1.96905 1.9686 1.9686 897.20
2007-03-30 16:03:00 1.9686 1.96900 1.9686 1.9690 1076.11
2007-03-30 16:04:00 1.9689 1.96910 1.9688 1.9690 849.70
2007-03-30 16:05:00 1.9690 1.96900 1.9688 1.9689 1402.80
余分な列を追加したい。この列は次のことを行います。
- この時点から 15 レコードを取得します (現在の時刻を含む)
- これらの 15 のレコードから最高入札額と最低入札額を取得します
- 高値と安値の差を計算し、その値を新しい列で使用します
以下を試しました。まず、データを読み込みます。
usecols = ['datetime','bidopen','bidhigh','bidlow','bidclose','bidvolume']
df=pd.read_csv(path,parse_dates=('datetime'),index_col=0, usecols = usecols )
関数を定義します。
def lookaheadmaxmin(df):
df2=df[:15]
high=df2['bidhigh'].max(axis=1)
low=df2['bidlow'].min(axis=1)
return high-low
それから
df['newcolumn'] = map( lookaheadmaxmin, df[:15])
これはエラーです。現在および将来のレコードのスライスを関数に渡す方法がわからないため、マップの「df[:15]」が問題であると確信しています
基本的に私がやろうとしているのは、次のように 15 分間の変動ウィンドウ内で価格がどれだけ変動したかを判断することです。
その間に; 16:00 - 16:15 - 価格はどれくらい動きましたか? これを16:00レコードの列に入れます
16:01 - 16:16 - 価格はどれくらい動きましたか? これを16:01レコードの列に入れます
16:02 - 16:17 - 価格はどれくらい動きましたか? これを16:02レコードの列に入れます
16:03 - 16:18 - 価格はどれくらい動きましたか? これを16:03レコードの列に入れます
16:04 - 16:19 - 価格はどれくらい動きましたか? これを16:04レコードの列に入れます
16:05 - 16:20 - 価格はどれくらい動きましたか? これを16:05レコードの列に入れます
追加情報:
Mac 用 Enthought Canopy バージョン 1.1.0 (64 ビット) を使用しています。Pandas バージョン: バージョン: 0.12.0-1 (numpy 1.7.1 を組み込む)
ソース データのサンプル:
currencypair,datetime,bidopen,bidhigh,bidlow,bidclose,askopen,askhigh,asklow,askclose,bidvolume,askvolume
GBPUSD,2007-03-30 16:01:00,1.96870,1.96900,1.96860,1.96860,1.96850,1.96880,1.96845,1.96850,877.40,1386.70
GBPUSD,2007-03-30 16:02:00,1.96860,1.96905,1.96860,1.96860,1.96850,1.96890,1.96840,1.96840,897.20,1272.30
GBPUSD,2007-03-30 16:03:00,1.96860,1.96900,1.96860,1.96900,1.96850,1.96890,1.96840,1.96880,1076.11,1333.30
GBPUSD,2007-03-30 16:04:00,1.96890,1.96910,1.96880,1.96900,1.96880,1.96890,1.96865,1.96880,849.70,765.10
GBPUSD,2007-03-30 16:05:00,1.96900,1.96900,1.96880,1.96890,1.96875,1.96890,1.96860,1.96870,1402.80,1240.90
GBPUSD,2007-03-30 16:06:00,1.96890,1.96890,1.96840,1.96860,1.96870,1.96870,1.96820,1.96850,769.50,1727.30
GBPUSD,2007-03-30 16:07:00,1.96860,1.96880,1.96820,1.96830,1.96850,1.96870,1.96810,1.96820,842.00,1865.60
GBPUSD,2007-03-30 16:08:00,1.96830,1.96930,1.96830,1.96910,1.96820,1.96920,1.96820,1.96890,1096.60,1197.70
GBPUSD,2007-03-30 16:09:00,1.96910,1.96920,1.96880,1.96890,1.96895,1.96910,1.96865,1.96880,368.60,432.10
補足として-レコードの表示に奇妙なことがあります(私はipythonノートブックを使用しています)。列を無視しても、'currencypair'
奇妙に列見出しとして表示されます。(他の動作していないことに関係があるかどうかわからないので、これを含めています。)
データのインポート (上記の csv_read を使用) ('currencypair'
名前のない列に注意)
usecols = ['datetime','bidopen','bidhigh','bidlow','bidclose','bidvolume']
df=pd.read_csv(path,parse_dates=('datetime'),index_col=0, usecols = usecols )
それからやって
df[:5]
表示: ('currencypair'
列見出しとして表示されますが、df.info()
以下ではとして表示されていることに注意してください'index'
)
bidopen bidhigh bidlow bidclose bidvolume
currencypair
2007-03-30 16:01:00 1.9687 1.96900 1.9686 1.9686 877.40
2007-03-30 16:02:00 1.9686 1.96905 1.9686 1.9686 897.20
2007-03-30 16:03:00 1.9686 1.96900 1.9686 1.9690 1076.11
2007-03-30 16:04:00 1.9689 1.96910 1.9688 1.9690 849.70
2007-03-30 16:05:00 1.9690 1.96900 1.9688 1.9689 1402.80
df.info()
ショー:
<class 'pandas.core.frame.DataFrame'>
Index: 2362159 entries, 2007-03-30 16:01:00 to 2013-09-02 18:59:00
Data columns (total 5 columns):
bidopen 2362159 non-null values
bidhigh 2362159 non-null values
bidlow 2362159 non-null values
bidclose 2362159 non-null values
bidvolume 2362159 non-null values
dtypes: float64(5)
別の方法でデータをインポートする
currencypair 列をインポートしてから削除します。'currencypair'
(追加後に列を削除することに注意してください)
usecols = ['currencypair','datetime','bidopen','bidhigh','bidlow','bidclose','bidvolume']
df=pd.read_csv(path,parse_dates=('datetime'),index_col=1, usecols = usecols )
df=df.drop('currencypair',1)
ショー:
bidopen bidhigh bidlow bidclose bidvolume
datetime
2007-03-30 16:01:00 1.9687 1.96900 1.9686 1.9686 877.40
2007-03-30 16:02:00 1.9686 1.96905 1.9686 1.9686 897.20
2007-03-30 16:03:00 1.9686 1.96900 1.9686 1.9690 1076.11
2007-03-30 16:04:00 1.9689 1.96910 1.9688 1.9690 849.70
2007-03-30 16:05:00 1.9690 1.96900 1.9688 1.9689 1402.80
およびdf.info()
表示: (メモ インデックスは として表示されるようになりました'DatetimeIndex'
)
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 2362159 entries, 2007-03-30 16:01:00 to 2013-09-02 18:59:00
Data columns (total 5 columns):
bidopen 2362159 non-null values
bidhigh 2362159 non-null values
bidlow 2362159 non-null values
bidclose 2362159 non-null values
bidvolume 2362159 non-null values
dtypes: float64(5)