Проблема с созданием столбца с использованием 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)
Другие вопросы по тегам