Создание переменной Pandas с использованием нескольких If-else
Нужна помощь с Pandas несколько утверждений IF-ELSE. У меня есть тестовый набор данных (Титаник) следующим образом:
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
Это дает точный прогноз с ключами в качестве идентификатора и значениями в 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 как) и использующие некоторую функцию (applymap и т. Д.) Или модификации того, что я написал ранее, были бы очень признательны.
Кроме того, как мы можем сделать то же самое с использованием метода applymap или apply / map в df?