熊猫如何根据条件填充细胞

时间:2020-03-19 09:57:36

标签: python pandas

我正在为我的算法构建一个回测器,如果要购买或出售信号,我希望它用0或1填充新列

生成买入信号:
1-如果两个不同列中的两个单元格超过某个阈值[Q5> 7&Q7> 7]:
填写新的列['BuySignal'] = 1
否则满足以下条件的第一条和第二条条件不满足BuySignal = 0

2-如果有两个买入信号,但是在第一个买入信号之后没有卖出信号,则不要用1填充BuySignal,将其保持为0(如您在第6行中看到的黄色)。下一个卖出信号

产生卖出信号:

如果只有一个单元格值超过某个阈值,则

1卖出[TCN> 8]
附注:如果同时满足买卖条件,我只想将BuySignal标记为1,Sell = 0

enter image description here
我期望的是:在第1行购买,忽略在第6行购买,在第10行出售,在第13行再次购买
为您的参考输入数据:https://drive.google.com/file/d/16qqrcvxJuTgd41233RNjwhaNVNREqWWe/view?usp=sharing

enter image description here

1 个答案:

答案 0 :(得分:1)

首先,我认为您的输出表中存在错误-根据规则2的买入信号,我认为在第1行和第13行中买入信号也应为0,因为在第2行中没有卖出信号14.这是我根据您的描述得到的,不确定这是否正是您的意思,但是确定了一个很好的起点。为了简化问题,我创建了两个BuySignal列-第一个显示在应用第一个规则后的状态,第二个显示在将第二个规则应用于第一个规则后的状态。您只需在最终解决方案中删除第一列即可。

# buy rule 1
data['BuySignal1'] = (data['Q5']>7) & (data['Q7']>7)

# sell rule 1
data['SellSignal'] = data['TCN']>8

# buy rule 2
data['BuySignal2'] = (data['BuySignal1']==1)&(data['SellSignal'].shift(-1)==1)

# PS basically - if BuySignal==1 then SellSignal==0
data.loc[data['BuySignal2']==1,'SellSignal'] = 0

# change booleans to types (just for display)
cols = ['BuySignal1','BuySignal2','SellSignal']
data[cols] = data[cols].astype(int)

这是输出: enter image description here