我有一个数据框,当满足某些条件时,我试图在其中创建二进制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”]列中的数据没有任何问题。
任何见识将不胜感激,谢谢!
答案 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)