我正在用 python 做我的第一个项目。我有一个名为 df 的 pandas 数据框,有两列“close”和“volume”。我想根据前两列计算/获取 OBV 列。公式如下;
如果收盘价高于前一收盘价,则:
当前 OBC = 先前 OBC + 当前交易量
如果收盘价低于前收盘价,则:
当前 OBV = 先前 OBV - 当前交易量
如果收盘价等于前收盘价,则:
当前 OBV = 之前的 OBV(无变化)
close volume OBC
30 2500 nan
32 3000 5500
25 2700 2800
35 4000 6800
20 1000 5800
我正在使用这段代码:
for i in df.close[1:]:
if i > df.close.shift(-1):
df["OBC"] = df.volume + df.OBC.shift(-1)
elif i < df.close.shift(-1):
df["OBC"] = df.OBC.shift(-1) - df.volume
else:
df["OBC"] = df.OBC
我收到此错误:
ValueError:系列的真值不明确。使用a.empty,
a.bool()、a.item()、a.any() 或 a.all()。
我看过这个问题但没有得到任何帮助。系列的真值是不明确的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()
除了这个错误之外,我觉得代码在计算正确的 OBV 时可能会遇到麻烦。任何帮助都将非常有价值。
我不知道你为什么会收到错误,但这里有一个获取 OBV 的解决方案:
np.where(df['close'] > df['close'].shift(1), df['volume'],
np.where(df['close'] < df['close'].shift(1), -df['volume'], 0)).cumsum()
它也更快,如果您要进行多次迭代,这很好!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)