我有一个包含日期、时间、价格、大小、信号的 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] 将显示“未解析”的日期,因为它在文件中但无序。尽管 parse_date=True 作为 set_index 中的参数。
我提出这个问题是因为我正在考虑用以下方式解决问题:
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()
我在 2012 年 12 月 30 日根据 DSM 的以下评论进行编辑:
正如我在下面评论的那样,我想用你的想法来获得损益表。如果 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']我没有在这里设置索引。尝试联合运算符 | 给出:
TypeError: unsupported operand type(s) for |: 'list' and 'list'
看看 Max Fellows 的方法,
@Max 研究员
关键是在一天结束时平仓;所以我们需要在收盘时捕捉到价格以“卸载”所有累积的 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