Python 如何根据if条件填充单元格

Python 如何根据if条件填充单元格,python,pandas,Python,Pandas,我正在为我的算法构建一个backtester,如果是买入或卖出信号,我希望它用0或1填充一个新列 生成购买信号: 1-如果两个不同列中的两个单元格超过某个阈值[Q5>7&Q7>7]:填充一个新列['BuySignal']=1 以下规则1和规则2中的else条件不满足fill BuySignal=0 2-如果有两个买入信号,但在第一个买入信号之后没有卖出信号,不要用1填充买入信号,保持为0,如第6行黄色所示。我们只能有一个买入信号,直到下一个卖出信号 生成销售信号: 1-仅当一个单元格值超过某个阈

我正在为我的算法构建一个backtester,如果是买入或卖出信号,我希望它用0或1填充一个新列

生成购买信号: 1-如果两个不同列中的两个单元格超过某个阈值[Q5>7&Q7>7]:填充一个新列['BuySignal']=1 以下规则1和规则2中的else条件不满足fill BuySignal=0 2-如果有两个买入信号,但在第一个买入信号之后没有卖出信号,不要用1填充买入信号,保持为0,如第6行黄色所示。我们只能有一个买入信号,直到下一个卖出信号

生成销售信号:

1-仅当一个单元格值超过某个阈值时出售[TCN>8] 注:如果同时满足买入和卖出条件,我只想将买入信号标为1,卖出=0 我所期望的是:在第1行买入,在第6行忽略买入,在第10行卖出,在第13行再次买入 为您的ref输入数据:


首先,我认为输出表中有一个错误——根据购买信号规则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)
这是输出:

通常,您可以通过使用df.loc来实现这一点,例如:df.loc[df['Q5']>7&df['Q7']>7,“BuySignal']=1这里loc的第一个术语描述了条件,第二个术语描述了您想要写入的列。我期望的是:在第1行买入,在第6行忽略买入,在第10行卖出,在第13j行再次买入,我想感谢你在回答中所做的努力,你能抽出时间来回答我真是太好了&我很感激。我有一个问题,买入信号2是买入信号的最终输出?现在我超出的是:在第1行买入,在第6行忽略买入,在第10行卖出,在第13行再次买入