Criação de variáveis do Pandas usando vários If-else

Precisa de ajuda com várias instruções IF-ELSE do Pandas. Eu tenho um conjunto de dados de teste (titânico) da seguinte maneira:

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

onde Id é o ID do passageiro. Quero criar uma nova variável de sinalizador nesse quadro de dados que tenha a seguinte regra:

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

Agora, para fazer isso, tentei algumas abordagens. Foi assim que me aproximei primeiro:

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

O problema com o código acima é que ele cria uma variável Prediction em df, mas com todos os valores como 0.

No entanto, se eu usar o mesmo código, mas o enviar para um dicionário, ele fornecerá a resposta correta, como mostrado abaixo:

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

Isso fornece uma previsão de ditado com chaves como ID e valores como 1 ou 0 com base na lógica acima.

Então, por que a variável df funciona incorretamente? Eu até tentei primeiro definir uma função e depois chamá-la. Deu o mesmo que o primeiro.

Então, como podemos fazer isso em pandas?

Em segundo lugar, acho que o mesmo pode ser feito se pudermos usar apenas várias instruções if-else. Eu sei np.where, mas não está permitindo adicionar 'e' condição. Então, aqui está o que eu estava tentando:

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

O exemplo acima deu um erro para as palavras-chave 'e' em onde.

Então alguém pode ajudar? Soluções com várias abordagens usando np.where (simples if-else like) e usando alguma função (applymap etc.) ou modificações no que escrevi anteriormente seriam realmente apreciadas.

Além disso, como fazemos o mesmo usando algum método applymap ou apply / map do df ?.

questionAnswers(1)

yourAnswerToTheQuestion