我有两个数据帧:
最后一个信号:
Unnamed: 0 coresym Lots open_orders direction
0 0 AUDUSD 110.39 0.0 9.0
1 1 EURUSD 88.19 0.0 9.0
2 2 GBPUSD -87.65 0.0 9.0
信号:
coresym Lots open_orders direction
0 AUDUSD 250.00 0.0 1.0
1 EURUSD 112.50 0.0 0.0
2 GBPUSD -97.11 0.0 0.0
我想根据上一个信号更改信号的值:
if ((last_signal[last_signal['coresym']=='AUDUSD']['direction'] == 9) & (signal[signal['coresym']=='AUDUSD']['Lots'] >100)):
signal[signal['coresym']=='AUDUSD']['direction'] = 9
我弄错了
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-36-0b88b27047e9> in <module>
----> 1 if ((last_signal[last_signal['coresym']=='AUDUSD']['direction'] == 9) & (signal[signal['coresym']=='AUDUSD']['Lots'] >100)):
2 signal[signal['coresym']=='AUDUSD']['direction'] = 9
~\anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
1327
1328 def __nonzero__(self):
-> 1329 raise ValueError(
1330 f"The truth value of a {type(self).__name__} is ambiguous. "
1331 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我试着调试自己:
last_signal[last_signal['coresym']=='AUDUSD']['direction'] == 9
0 True
Name: direction, dtype: bool
signal[signal['coresym']=='AUDUSD']['Lots'] >100
0 True
Name: Lots, dtype: bool
((last_signal[last_signal['coresym']=='AUDUSD']['direction'] == 9) & (signal[signal['coresym']=='AUDUSD']['Lots'] >100))
0 True
dtype: bool
我真的不明白为什么,我想其他人可能也有同样的问题,所以我把它贴在这里
如果您从最终输出中注意到,在应用所有操作后,您会得到一个序列,因此您不能像这样获得其真值:
因此,你的
if
陈述就有了问题。要克服它,请这样做.any()
对于包含单个True
的序列(至少一个True
足以使.any()
计算为True
),将计算为True
。所以基本上是这样做的:由于使用
&
后得到的序列只包含一个布尔值,因此也可以使用.bool()
:相关问题 更多 >
编程相关推荐