Crea una nuova colonna nel dataframe python 3 (panda) in base al valore in un'altra colonna

Aug 16 2020

Ho un dataframe panda in cui devo creare nuove colonne basate sui valori di altre colonne nel dataframe. Ecco il dataframe

persona città stato paese

Un Chicago Illinois Stati Uniti d'America

B Phoenix Arizona Stati Uniti

C San Diego California USA

Voglio creare due nuove colonne basate sui valori in state

  1. Crea una nuova colonna df["city-north"] = df['city'] dove state = "Illinois"
  2. Crea una nuova colonna df["city-south"] = df['city'] dove lo stato non è uguale a "Illinois"

Provai

df.loc[((df['state'] == 'Illinois')), 'city-north'] = df['city']

df.loc[((df['state'] != 'Illinois')), 'city-south'] = df['city']

Ma la seconda riga di codice in cui non è uguale alla condizione non crea la colonna "città-sud". Per favore aiuto

Risposte

1 jezrael Aug 16 2020 at 13:10

Per me funziona bene, se non vengono create condizioni di corrispondenza valori mancanti:

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

Se hai bisogno di stringhe di valori vuoti per righe non abbinate:

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