從 yahoo Finance 下載 ohlcv for nvidia 讀取,我正在為信號購買/dontbuy 創(chuàng)建一個列,當(dāng)我嘗試定義哪些通過 avg>volume 測試時,一切要么全部“購買”,要么不購買。df=pd.read_csv('NVDA.csv',dtype={'label':str})df['Price%delta']=((df['Close']/df['Open'])*100) df['Avg_volume']=df['Volume'].rolling(7).mean()df['Signal']=0for index, row in df.iterrows(): if row['Volume'] > row['Avg_volume']: df['Signal']='Buy' else: df['Signal']='Dont Buy'
3 回答

慕斯709654
TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個贊
你根本不需要 for 循環(huán):
mask = df["Volume"] > df["Avg_volume"]
df.loc[mask, "Signal"] = "Buy"
df.loc[~mask, "Signal"] = 'Don't buy'

當(dāng)年話下
TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個贊
使用np.where()
以下方法的矢量化解決方案:
df['Signal'] = np.where(df['Volume'] > df['Avg_volume'], 'Buy', 'Dont Buy')

慕工程0101907
TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個贊
您沒有指定任何索引來分配'Buy'或'Don't buy'。使用loc來代替:
for index, row in df.iterrows():
if row['Volume'] > row['Avg_volume']:
df.loc[index, 'Signal']='Buy'
else:
df.loc[index, 'Signal']='Dont Buy'
添加回答
舉報
0/150
提交
取消