Cree una nueva columna en el marco de datos de Python 3 (pandas) según el valor en otra columna
Aug 16 2020
Tengo un marco de datos de pandas donde necesito crear nuevas columnas basadas en valores de otras columnas en el marco de datos. Aquí está el marco de datos
persona ciudad estado pais
Chicago, Illinois, EE. UU.
B Fénix Arizona EE. UU.
C San Diego California EE.UU.
Quiero crear dos nuevas columnas basadas en los valores del estado.
- Crear nueva columna df["ciudad-norte"] = df['ciudad'] donde estado = "Illinois"
- Crear nueva columna df["ciudad-sur"] = df['ciudad'] donde el estado no es igual a "Illinois"
Lo intenté
df.loc[((df['state'] == 'Illinois')), 'city-north'] = df['city']
df.loc[((df['state'] != 'Illinois')), 'city-south'] = df['city']
Pero la segunda línea de código donde no es igual a la condición no crea la columna 'ciudad-sur'. Por favor ayuda
Respuestas
1 jezrael Aug 16 2020 at 13:10
Para mí funciona bien, si no se crean condiciones de coincidencia, se crean valores faltantes:
df.loc[df['state'] == 'Illinois', 'city-north'] = df['city']
df.loc[df['state'] != 'Illinois', 'city-south'] = df['city']
print (df)
person city state country city-north city-south
0 A Chicago Illinois USA Chicago NaN
1 B Phoenix Arizona USA NaN Phoenix
2 C San Diego California USA NaN San Diego
Si necesita cadenas de valores vacías para filas no coincidentes:
df['city-north'] = np.where(df['state'] == 'Illinois', df['city'], '')
df['city-south'] = np.where(df['state'] != 'Illinois', df['city'], '')
print (df)
person city state country city-north city-south
0 A Chicago Illinois USA Chicago
1 B Phoenix Arizona USA Phoenix
2 C San Diego California USA San Diego