我在哪里产生了报告的歧义,我该如何解决?

我有一个数据框“资产”,列包括“方向”、“打开”、“关闭”和“摆动”。我想生成一个列“Break”,因此:

if (((asset['Direction'] == 1) & (asset.open.shift(2) <= asset['Swing']) & (asset.close.shift(2) >= asset['Swing']) & (asset.open.shift(1) >= asset['Swing']) & (asset.close.shift(1) >= asset['Swing']) & (asset.open >= asset['Swing']) & (asset.close >= asset['Swing'])) |
    ((asset['Direction'] == -1) & (asset.open.shift(2) >= asset['Swing']) & (asset.close.shift(2) <= asset['Swing']) & (asset.open.shift(1) <= asset['Swing']) & (asset.close.shift(1) <= asset['Swing']) & (asset.open <= asset['Swing']) & (asset.close <= asset['Swing']))):
                   asset['Break'] = True

但是,这会产生以下错误:

"The truth value of a {type(self).__name__} is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()."

我以为我使用了正确的“按位”运算符来避免这种情况,但错误仍然存在......


弑天下
浏览 124回答 1
1回答

梵蒂冈之花

这个巨大的表达式会产生一系列布尔值。你需要按照它说的去做:决定你是否希望条件if是“所有这些布尔值都为真”,“这些布尔值都不为真”等。但我认为您真正想做的是将 True 分配给break满足条件的列。为此你应该这样做:asset['Break']&nbsp;=&nbsp;((asset['Direction']&nbsp;==&nbsp;1)&nbsp;&&nbsp;...这会将一个数组分配给一个数组,而不是像您的代码那样将数组与标量混淆。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python