我在stack overflow中遇到了很多问题,但仍然无法解决这个问题。我知道它返回Bool etc,但基本上我想对一个数据帧应用多个条件(If And Else,Else If…),但如果要求您使用any(),all()
代码如下:
if (stratData['Ratio'].shift(1) < 1) & (stratData['60'].shift(1) < stratData['Ratio'].shift(1)):
stratData['pos'] = -1
else:
stratData['pos'] = 1
我希望这能起作用,并为stratData['pos']列添加进一步的条件。我试过创建一个myfunc=lambda。。。我也试过了np.哪里. 谢谢你的帮助!你知道吗
编辑:我应该早点发布,但我想做多个条件,所以除了使用[idx]的TRUE-FALSE
if (stratData['Ratio'].shift(1) < 1) & (stratData['60'].shift(1) < stratData['Ratio'].shift(1)):
stratData['pos'] = -1
elif (stratData['Ratio'].shift(1) > 1) & (stratData['60'].shift(1) > stratData['Ratio'].shift(1)):
stratData['pos'] = 1
else:
stratData['pos'] = 0
DataFrame
的每一列都是值的Series
,而不是标量,因此逻辑表达式:将计算为
bool
类型的Series
,而不是标量。假设有些元素是True
,有些是False
,那么if
语句下的下一行是否应该执行?这是模棱两可的。因此,if
语句后面必须始终跟一个表达式,该表达式可以安全地转换为标量布尔值。你知道吗查看代码时,您可能会尝试执行两种完全不同的操作之一:
“如果序列中元素的all是
True
,则将'pos'
列中值的all设置为-1
”。在这种情况下,您可以:“对于序列中
True
的每个元素,将'pos'
列中对应的元素设置为-1
。”。在这种情况下,您可以将序列用作stratData['pos']
的布尔索引:我猜你可能想要第二种选择。你知道吗
我看你已经修改了你的问题。既然你说“使用[idx]”,我想选项2就是你想要的。如果您想测试多个条件,那么您可以简单地生成多组布尔索引,例如:
相关问题 更多 >
编程相关推荐