列的信号条件
Signal conditional for column
从 yahoo finance 读取 nvidia 的 ohlcv,
我正在为信号 buy/dontbuy 创建一个列,当我尝试定义哪些通过 avg>volume 测试时,所有内容要么全部 'buy' 出现,要么不购买。
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']=0
for index, row in df.iterrows():
if row['Volume'] > row['Avg_volume']:
df['Signal']='Buy'
else:
df['Signal']='Dont Buy'
您没有指定要分配 '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'
您根本不需要 for 循环:
mask = df["Volume"] > df["Avg_volume"]
df.loc[mask, "Signal"] = "Buy"
df.loc[~mask, "Signal"] = 'Don't buy'
使用np.where()
的向量化解决方案:
df['Signal'] = np.where(df['Volume'] > df['Avg_volume'], 'Buy', 'Dont Buy')
从 yahoo finance 读取 nvidia 的 ohlcv, 我正在为信号 buy/dontbuy 创建一个列,当我尝试定义哪些通过 avg>volume 测试时,所有内容要么全部 'buy' 出现,要么不购买。
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']=0
for index, row in df.iterrows():
if row['Volume'] > row['Avg_volume']:
df['Signal']='Buy'
else:
df['Signal']='Dont Buy'
您没有指定要分配 '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'
您根本不需要 for 循环:
mask = df["Volume"] > df["Avg_volume"]
df.loc[mask, "Signal"] = "Buy"
df.loc[~mask, "Signal"] = 'Don't buy'
使用np.where()
的向量化解决方案:
df['Signal'] = np.where(df['Volume'] > df['Avg_volume'], 'Buy', 'Dont Buy')