Создание переменной Pandas с использованием нескольких If-else

Нужна помощь с несколькими заявлениями IF-ELSE от Pandas. У меня есть тестовый набор данных (титанический) следующим образом:

ID Survived Pclass Name Sex Age 1 0 3 Braund male 22 2 1 1 Cumings, Mrs. female 38 3 1 3 Heikkinen, Miss. Laina female 26 4 1 1 Futrelle, Mrs. female 35 5 0 3 Allen, Mr. male 35 6 0 3 Moran, Mr. male 7 0 1 McCarthy, Mr. male 54 8 0 3 Palsson, Master male 2 

где Id – идентификатор пассажира. Я хочу создать новую флаговую переменную в этом фрейме данных, который имеет следующее правило:

 if Sex=="female" or (Pclass==1 and Age <18) then 1 else 0. 

Теперь для этого я попробовал несколько подходов. Вот как я сначала подходил:

 df=pd.read_csv(data.csv) for passenger_index,passenger in df.iterrows(): if passenger['Sex']=="female" or (passenger['Pclass']==1 and passenger['Age']<18): df['Prediction']=1 else: df['Prediction']=0 

Проблема с приведенным выше кодом заключается в том, что он создает переменную Prediction в df, но со всеми значениями как 0.

Однако, если я использую тот же код, но вместо этого вывожу его в словарь, он дает правильный ответ, как показано ниже:

 prediction={} df=pd.read_csv(data.csv) for passenger_index,passenger in df.iterrows(): if passenger['Sex']=="female" or (passenger['Pclass']==1 and passenger['Age']<18): prediction[passenger['ID']=1 else: prediction[passenger['ID']=0 

Это дает предсказание dict с ключами как ID и значениями 1 или 0 на основе вышеуказанной логики.

Итак, почему переменная df работает неправильно ?. Я даже попытался сначала определить функцию, а затем вызвать ее. Дал те же самые, что и раньше.

Итак, как мы можем это сделать в пандах ?.

Во-вторых, я думаю, что то же самое можно сделать, если мы можем просто использовать несколько кратких операторов if-else. Я знаю np.where, но он не позволяет добавлять условие «и». Итак, вот что я пытался:

 df['Prediction']=np.where(df['Sex']=="female",1,np.where((df['Pclass']==1 and df['Age']<18),1,0) 

Вышеизложенное дало ошибку для ключевого слова «и» в котором.

Так может кто-то помочь ?. Решения с множественным подходом, использующие np.where (простое if-else like) и использование некоторой функции (applymap и т. Д.), Или модификации того, что я написал ранее, будут действительно оценены.

Также как мы делаем то же самое с использованием некоторого метода applymap или apply / map для df ?.

One Solution collect form web for “Создание переменной Pandas с использованием нескольких If-else”

Вместо того, чтобы перебирать строки с помощью df.iterrows (что относительно медленно), вы можете назначить нужные значения столбцу Prediction в одном присваивании:

 In [27]: df['Prediction'] = ((df['Sex']=='female') | ((df['Pclass']==1) & (df['Age']<18))).astype('int') In [29]: df['Prediction'] Out[29]: 0 0 1 1 2 1 3 1 4 0 5 0 6 0 7 0 Name: Prediction, dtype: int32 

Для вашего первого подхода помните, что df['Prediction'] представляет весь столбец df , поэтому df['Prediction']=1 присваивает значение 1 каждой строке в этом столбце. Поскольку df['Prediction']=0 было последним назначением, весь столбец был заполнен нулями.

Для вашего второго подхода обратите внимание, что вам нужно использовать & not and выполнить элементную логическую операцию и операцию на двух массивах NumPy или Pandas NDFrames. Таким образом, вы можете использовать

 In [32]: np.where(df['Sex']=='female', 1, np.where((df['Pclass']==1)&(df['Age']<18), 1, 0)) Out[32]: array([0, 1, 1, 1, 0, 0, 0, 0]) 

хотя я думаю, что гораздо проще использовать | для логических и & или логических – и:

 In [34]: ((df['Sex']=='female') | ((df['Pclass']==1) & (df['Age']<18))) Out[34]: 0 False 1 True 2 True 3 True 4 False 5 False 6 False 7 False dtype: bool 
  • Python Как получить значения, которые находятся в одном фрейме данных, но не в секундах
  • Правильный способ обратного pandas.DataFrame?
  • Pandas объединяет два блока данных с разными столбцами
  • Как удалить нечисловой столбец из входного набора данных?
  • Как использовать groupby для конкатенации строк в python pandas?
  • для цикла слишком долго для создания / экспорта вывода в Python
  • Параллелизировать применять после pandas groupby
  • Добавить процент от общей колонки в Pandas pivot_table
  • Python - лучший язык программирования в мире.