将股票指标添加到Pandas DataFrame中-ValueError:系列的真值不明确使用a.empty,a.bool,a.item,a.any或

问题描述

我有一个带有ohlc数据的大熊猫股票数据框,并且我正在使用btalib(技术分析)软件包添加一些指标。我现在拥有的数据框与此类似,但是每只股票有200行(QQQ Holdings前500名股票)。

symbol        time    open  ...   close    volume
AAPL    2019-10-28  247.42  ...  249.04  22187260
AAPL    2019-10-29  248.97  ...  243.29  32725739
AAPL    2019-10-30  244.76  ...  243.29  25443913
AAPL    2019-10-31  247.24  ...  248.84  29688327
AAPL    2019-11-01  249.54  ...  255.84  33985331

SMA是使用前几天收盘价中的库存数据计算得出的。因此,如果我用于SMA的时间段是20天,则收盘价(基本上)仅是最近20天的平均价格,如下所示

sma20 = btalib.sma(df,period=20) # instantiate sma20 w/ period of 20 days

但是,我每只股票都有200天的数据(因为以后我将使用200天作为单独的列值),并且我需要使用SMA计算来重置每次交易中的符号列数据框更改。这是我遇到的麻烦。

这是应该工作的方式

df['sma20'] = sma20.df

print(df[200:203])

输出

sma20的前20行为空,因为它们需要计算这些值。这部分按预期工作。但是,当股票代码从AAPL切换到ADBE时,sma20的值会与数据帧中的前20条记录(即AAPL的记录)继续进行。此时,我需要它们重置。

record# symbol        time     open  ...    volume    sma20
200     AAPL  2020-08-13  457.720  ...     48325440   412.80320
201     ADBE  2019-10-28  271.580  ...      2002911   407.11320
202     ADBE  2019-10-29  271.680  ...      1483643   401.01470

我曾考虑为此创建自己的函数,但是一旦添加了更复杂的指标,这将变得非常繁琐,而且我觉得使用库来帮助我会更容易。

这就是我现在要去的地方:

我有一个symbol_shifted列,该列实际上只是将所有符号向上推一位。我的想法是,我可以检查符号是否等于此符号移位列。如果不是,则应重新计算。

这是符号移位的外观:

record# symbol symbol_shifted      sma20
200     AAPL   AAPL            412.80320
201     ADBE   AAPL            407.11320
202     ADBE   ADBE            401.01470

这是我要使用的代码

for i in df:
    while True:
        if df['symbol']==df['symbol_shifted']:
            df['sma20']=sma20.df
        else:
            continue

我已经尝试了多种方法类似的逻辑(例如,在使用pandas的函数中使用上述逻辑,更改了对记录的索引方式),但是我似乎无法使其正常工作。在记录编号201处,符号!= symbol_shifted。因此,如果if语句认为是这种情况,则无限循环应重置并重新开始计算。我不确定为什么这行不通,但是如果有人愿意提供反馈或想法,我将不胜感激!这是我当前收到的错误

ValueError: The truth value of a Series is ambiguous. Use a.empty,a.bool(),a.item(),a.any() or a.all().

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)