Python 列的条件信号
阅读雅虎财经为nvidia下载ohlcv, 我正在为signal buy/dontbuy创建一个列,当我试图定义哪个通过了avg>volume测试时,所有内容要么全部“买入”,要么不买入Python 列的条件信号,python,pandas,quantitative-finance,Python,Pandas,Quantitative Finance,阅读雅虎财经为nvidia下载ohlcv, 我正在为signal buy/dontbuy创建一个列,当我试图定义哪个通过了avg>volume测试时,所有内容要么全部“买入”,要么不买入 df=pd.read_csv('NVDA.csv',dtype={'label':str}) df['Price%delta']=((df['Close']/df['Open'])*100) df['Avg_volume']=df['Volume'].rollin
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-Buy'
的索引。改用:
您没有指定任何要分配
'Buy'
或'Don-Buy'
的索引。改用:
您根本不需要for循环:
mask = df["Volume"] > df["Avg_volume"]
df.loc[mask, "Signal"] = "Buy"
df.loc[~mask, "Signal"] = 'Don't buy'
您根本不需要for循环:
mask = df["Volume"] > df["Avg_volume"]
df.loc[mask, "Signal"] = "Buy"
df.loc[~mask, "Signal"] = 'Don't buy'
使用
np.where()
的矢量化解决方案:
使用
np.where()
的矢量化解决方案:
你的问题是什么?使用类似于
df['Signal']=np.where(行['Volume']>行['Avg\u Volume'],'Buy','not Buy')
。避免使用for循环,因为它可以在矢量化的环境中完成way@IanQuah请注意,在每次迭代中,OP只是设置整个系列,而不是每一行。因此,他得到了所有重复的值,根据他的上一次迭代,这些值要么都是Buy
要么是Dont Buy
,谢谢你的建议。你的问题是什么?使用类似df['Signal']=np.where(row['Volume']>row['Avg_Volume'],'Buy','Dont Buy')
。避免使用for循环,因为它可以在矢量化的环境中完成way@IanQuah请注意,在每次迭代中,OP只是设置整个系列,而不是每一行。因此,他得到了所有重复的值,根据他上次的迭代,要么都是Buy
或者Dont Buy
,谢谢我感谢你的建议它终于起作用了谢谢你知道得很好。请让我知道,我通过将答案设置为正确来为您解决它。仅供参考-此解决方案将比我发布的用于更大数据帧的矢量化解决方案慢得多。我知道@rahlf23它可以矢量化,但是,鉴于用户不知道如何正确索引数据,我发现在纠正实际代码方面给予一些帮助更合适。不要说你的答案是错误的@nixon,它肯定会为OP产生所需的输出。只是指出一点:)它终于起作用了,谢谢你nixonGood知道。请让我知道,我通过将答案设置为正确来为您解决它。仅供参考-此解决方案将比我发布的用于更大数据帧的矢量化解决方案慢得多。我知道@rahlf23它可以矢量化,但是,鉴于用户不知道如何正确索引数据,我发现在纠正实际代码方面提供一些帮助更合适。不要说你的答案是错误的@nixon,它肯定会为OP生成所需的输出。只需指出一点:)
df['Signal'] = np.where(df['Volume'] > df['Avg_volume'], 'Buy', 'Dont Buy')