使用np.where创建列的问题,ArrayType错误

时间:2018-08-07 16:59:17

标签: python np

我有一个数据框,当满足某些条件时,我试图在其中创建二进制1/0列。我正在使用的代码如下:

sd_threshold = 5

df1["signal"] = np.where(np.logical_and(df1["high"] >= df1["break"], df1["low"] 
<= df1["break"], df1["sd_round"] > sd_threshold), 1, 0)

当包含最后一个条件TypeError: return arrays must be of ArrayType时,代码将返回df1["sd_round"] > sd_threshold,否则它将正常工作。 df1 [“ sd_round”]列中的数据没有任何问题。

任何见识将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:2)

check the documentation-np.logical_and()比较您提供的前两个参数,并将输出写入第三个参数。您可以使用嵌套调用,但我只想使用&pandas boolean indexing):

df1["signal"] = np.where((df1["high"] >= df1["break"]) & 
                         (df1["low"] <= df1["break"]) &
                         (df1["sd_round"] > sd_threshold), 
                         1, 0)

编辑:您实际上可以跳过numpy并将您的布尔系列强制转换为int以产生1和0:

mask = ((df1["high"] >= df1["break"]) & 
        (df1["low"] <= df1["break"]) &
        (df1["sd_round"] > sd_threshold))
df1["signal"] = mask.astype(int)