Creación de variables pandas utilizando múltiples If-else
Necesita ayuda con las múltiples declaraciones de IF-ELSE de Pandas. Tengo un conjunto de datos de prueba (titánico) de la siguiente manera:
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
donde Id es la identificación del pasajero. Quiero crear una nueva variable de bandera en este marco de datos que tenga la siguiente regla:
if Sex=="female" or (Pclass==1 and Age <18) then 1 else 0.
Ahora para hacer esto probé algunos enfoques. Así es como me acerqué primero:
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
El problema con el código anterior es que crea una variable de predicción en df pero con todos los valores como 0.
Sin embargo, si utilizo el mismo código pero lo envío a un diccionario, da la respuesta correcta como se muestra a continuación:
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
Esto proporciona una predicción dict con claves como ID y valores como 1 o 0 según la lógica anterior.
Entonces, ¿por qué la variable df funciona incorrectamente? Incluso intenté definiendo primero una función y luego llamándola. Dio el mismo ans como primero.
Entonces, ¿cómo podemos hacer esto en pandas?
En segundo lugar, supongo que se puede hacer lo mismo si solo podemos usar algunas declaraciones if-else múltiples. Sé np.where pero no permite agregar 'y' condición. Entonces, esto es lo que estaba intentando:
df['Prediction']=np.where(df['Sex']=="female",1,np.where((df['Pclass']==1 and df['Age']<18),1,0)
Lo anterior dio un error para 'y' palabra clave en donde.
Entonces, ¿alguien puede ayudar? Las soluciones con enfoque múltiple usando np.where (simple como if-else like) y usando alguna función (applymap, etc.) o modificaciones a lo que escribí anteriormente serían realmente apreciadas.
Además, ¿cómo hacemos lo mismo usando algún método applymap o apply / map de df ?.