Создание переменной 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?

Ответы на вопрос(1)

Ваш ответ на вопрос