日付、時刻、価格、雑誌、信号を含むcsvファイルがあります。62035行; ファイル内の一意の日付ごとに42回の時刻が関連付けられています。
日付ごとに、シグナル列に「S」がある場合は、「S」が発生した時点の対応する価格を追加します。以下はその試みです。
from pandas import *
from numpy import *
from io import *
from os import *
from sys import *
DF1 = read_csv('___.csv')
idf=DF1.set_index(['date','time','price'],inplace=True)
sStore=[]
for i in idf.index[i][0]:
sStore.append([idf.index[j][2] for j in idf[j][1] if idf['signal']=='S'])
sStore.head()
Traceback (most recent call last)
<ipython-input-7-8769220929e4> in <module>()
1 sStore=[]
2
----> 3 for time in idf.index[i][0]:
4
5 sStore.append([idf.index[j][2] for j in idf[j][1] if idf['signal']=='S'])
NameError: name 'i' is not defined
ここでiインデックスが許可されていない理由がわかりません。ありがとう。
私もそれは奇妙だと思います:
idf.index.levels [0]は、ファイル内にあるが順序が正しくないため、「解析されていない」日付を表示します。それにもかかわらず、set_indexの引数としてparse_date=True。
次のようなもので問題をサイドスワイプすることを考えていたので、これを取り上げます。
for i in idf.index.levels[0]:
sStore.append([idf.index[j][2] for j in idf.index.levels[1] if idf['signal']=='S'])
sStore.head()
以下のDSMのコメントに基づく2012年12月30日の私の編集:
以下にコメントするように、あなたのアイデアを使って損益を取得したいと思います。ここで、S!= Bの場合、任意の日付について、終了時刻1620を使用して差を付けます。
v=[df["signal"]=="S"]
t=[df["time"]=="1620"]
u=[df["signal"]!="S"]
df["price"][[v and (u and t)]]
つまり、「1620での価格を教えてください。(「販売信号」が出ない場合でも、S)、「余分なB」と区別できるようにします。B>Sの特別な場合に使用します。これは対称的な懸念(S> Bの場合)を無視しますが、今のところ、この論理的な問題を理解したいと思います。
トレースバックでは、この式は次のようになります。
ValueError: boolean index array should have 1 dimension
df ["time']を呼び出すために、ここではset_indexを設定しないことに注意してください。ユニオン演算子|を試してみると、次のようになります。
TypeError: unsupported operand type(s) for |: 'list' and 'list'
マックスフェローのアプローチを見て、
@マックスフェロー
ポイントは、一日の終わりにポジションをクローズすることです。したがって、蓄積されたすべてのB、Sを「アンロード」に近い価格でキャプチャする必要があります。しかし、お互いを相殺しませんでした。私が言うなら:
filterFunc1 = lambda row: row["signal"] == "S" and ([row["signal"] != "S"][row["price"]=="1620"])
filterFunc2 =lambda row: ([row["price"]=="1620"][row["signal"] != "S"])
filterFunc=filterFunc1 and filterFunc2
filteredData = itertools.ifilter(filterFunc, reader)
トレースバック時:
IndexError: list index out of range