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 ?.