簡體   English   中英

熊貓如何根據條件填充單元格

[英]pandas how to fill a cell based on if condition

我正在為我的算法構建一個回測器,如果它是買入或賣出信號,我希望它用 0 或 1 填充新列

產生買入信號:
1-如果兩個不同列中的兩個單元格超過某個閾值 [ Q5> 7 & Q7>7 ] :
填充一個新的 col ['BuySignal'] = 1
else 條件不滿足下面的規則一和規則二填充 BuySignal = 0

2-如果有兩個買入信號,但在第一個買入信號之后沒有賣出信號,不要用 1 填充 BuySignal,將其保持為 0(如您在第 6 行黃色中看到的。)我們只能有一個買入信號,直到下一個賣出信號

產生賣出信號:

1-賣出,如果只有一個單元格值超過某個閾值 [TCN > 8]
PS:如果同時滿足買入和賣出條件,我只想將 BuySignal 標記為 1 和 Sell = 0

在此處輸入圖片說明
我期待的是:在第 1 行買入,在第 6 行忽略買入,在第 10 行賣出,在第 13 行再次買入
為您的參考輸入數據: https : //drive.google.com/file/d/16qqrcvxJuTgd41233RNjwhaNVNREqWWe/view? usp =sharing

在此處輸入圖片說明

首先,我認為您的輸出表中存在錯誤 - 根據買入信號的規則 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)

這是輸出: 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM