gcc
является GCC-компилятором-драйвером для программ C, g++
является тем, который предназначен для программ на C ++. Оба будут угадывать язык на основе расширения файла, если не переопределены.
Но если вы используете неправильный драйвер, параметры по умолчанию будут неправильными, например, если вы не указали стандартную библиотеку C ++ для программ на C ++, скомпилированных с помощью gcc
.
Вы может добавлять только библиотеку с помощью -lstdc++
, хотя предпочтительный драйвер предпочтительнее, так как простой gcc может отсутствовать в других более тонких параметрах .
Насколько я знаю, 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 или другие контейнеры.