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.

  1. Crear nueva columna df["ciudad-norte"] = df['ciudad'] donde estado = "Illinois"
  2. 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