为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

弑天下 2023-05-09 14:48:18
我有一个数据框“资产”,列包括“方向”、“打开”、“关闭”和“摆动”。我想生成一个列“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()."我以为我使用了正确的“按位”运算符来避免这种情况,但错误仍然存在......
查看完整描述

1 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

这个巨大的表达式会产生一系列布尔值。你需要按照它说的去做:决定你是否希望条件if是“所有这些布尔值都为真”,“这些布尔值都不为真”等。

但我认为您真正想做的是将 True 分配给break满足条件的列。为此你应该这样做:

asset['Break'] = ((asset['Direction'] == 1) & ...

这会将一个数组分配给一个数组,而不是像您的代码那样将数组与标量混淆。


查看完整回答
反对 回复 2023-05-09
  • 1 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信