Проблема с созданием столбца с использованием np.where, ошибка ArrayType
У меня есть фрейм данных, в котором я пытаюсь создать двоичный столбец 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 ответ
проверить документацию - np.logical_and()
сравнивает первые два аргумента, которые вы ему даете, и записывает вывод в третий. Вы можете использовать вложенный вызов, но я бы просто пойти с &
( логическое индексирование панд):
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)