Вложенный np.where

gcc является GCC-компилятором-драйвером для программ C, g++ является тем, который предназначен для программ на C ++. Оба будут угадывать язык на основе расширения файла, если не переопределены.

Но если вы используете неправильный драйвер, параметры по умолчанию будут неправильными, например, если вы не указали стандартную библиотеку C ++ для программ на C ++, скомпилированных с помощью gcc.

Вы может добавлять только библиотеку с помощью -lstdc++, хотя предпочтительный драйвер предпочтительнее, так как простой gcc может отсутствовать в других более тонких параметрах .

-1
задан Scotty1- 16 January 2019 в 15:32
поделиться

1 ответ

Насколько я знаю, np.where не поддерживает множественные операторы возврата (по крайней мере, не более двух). Так что либо вы переписываете np.where, чтобы получить одно утверждение True и одно False, и возвращать 1/0 для True / False, либо вам нужно использовать маски.

Если переписать np.where, вы ограничены двумя результатами, и второй результат всегда будет установлен, когда условие не True. Таким образом, это будет также установлено для значений как (S == 5) & (A = np.nan).

df['Result'] = np.where(((df.S == 1) & (df.A == 1)) | ((df.S == 2) & (df.A == 0)), 1, 0)

При использовании масок вы можете применять произвольное количество условий и результатов. Для вашего примера решение выглядит следующим образом:

mask_0 = ((df.S == 1) & (df.A == 0)) | ((df.S == 2) & (df.A == 1))
mask_1 = ((df.S == 1) & (df.A == 1)) | ((df.S == 2) & (df.A == 0))
df.loc[mask_0, 'Result'] = 0
df.loc[mask_1, 'Result'] = 1

Результаты будут установлены в np.nan, где не выполняются никакие условия. Это imho отказоустойчиво и поэтому должно быть использовано. Но если вы хотите, чтобы в этих местах были нули, просто инициализируйте столбец Results нулями.
Конечно, это можно упростить для особых случаев, например, иметь только 1 и 0 в качестве результата, и расширить для любого количества результатов, используя dicts или другие контейнеры.

0
ответ дан Scotty1- 16 January 2019 в 15:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: