Создание переменной 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 
  • Извлечь строку с максимальным значением в рамке данных группы pandas
  • AttributeError: модуль 'pandas' не имеет атрибута 'to_csv'
  • заменить строки в кадре данных pandas
  • Сумма набора значений из кадра данных pandas в течение определенного временного интервала
  • Pandas DataFrame: конвертировать WKT в GeoJSON в новый столбец, используя функцию Lambda
  • модель линейной регрессии с ошибками AR python
  • Pandas расширяет поле json через записи
  • Python, Pandas применяют вычисления функции и процентиля
  • Разделение кадра данных в относительно четные фрагменты по длине
  • Объединение таблицы / DataFrames с общим столбцом в Python
  • ImportError: нет модуля с именем pandas
  •  
    Interesting Posts for Van-Lav

    Хорошо ли иметь синтаксический сахар для работы композиции в Python?

    Как вызвать функцию / переменную скрипта оболочки из python?

    Python обрезает 255 символов при запросе MS SqlServer с помощью FreeTDS

    Простой пример использования ffmpeg в качестве подпроцесса Python и «проверка» на преобразовании

    Передача параметров хранимым процедурам с помощью PyODBC

    Коэффициент корреляции Пирсона 2-хвостовая p-значение, значение

    Base metaclass overriding __new__ генерирует классы с неправильным __module__

    Прочитать текстовый файл в словаре, удаляя заголовок / завершающие символы новой строки

    Python: Загрузить возвращенный Zip-файл из URL-адреса

    TypeError: worker () принимает 0 позиционных аргументов, но 1 дано

    График Matplotlib не отображается в PyCharm

    Получить результат из задачи «task_id» в сельдерей из неизвестной задачи

    Удаление элементов из списка в Python

    Написание прокси-сервера тонких объектов путем реализации дескриптора __get__

    Панды: применение Лямбды к нескольким кадрам данных

    Python - лучший язык программирования в мире.