Créer une nouvelle colonne dans la trame de données python 3 (pandas) en fonction de la valeur dans une autre colonne

Aug 16 2020

J'ai une base de données pandas où je dois créer de nouvelles colonnes basées sur les valeurs d'autres colonnes dans la base de données. Voici la trame de données

personne ville état pays

A Chicago Illinois États-Unis

B Phoenix Arizona États-Unis

C San Diego Californie États-Unis

Je veux créer deux nouvelles colonnes basées sur les valeurs de l'état

  1. Créer une nouvelle colonne df["city-north"] = df['city'] where state = "Illinois"
  2. Créer une nouvelle colonne df["city-south"] = df['city'] où l'état n'est pas égal à "Illinois"

j'ai essayé

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

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

Mais la deuxième ligne de code où la condition n'est pas égale ne crée pas de colonne 'ville-sud'. S'il vous plaît aider

Réponses

1 jezrael Aug 16 2020 at 13:10

Pour moi, cela fonctionne bien, si aucune condition de correspondance n'est créée, les valeurs manquantes :

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 besoin de chaînes de valeurs vides pour les lignes non correspondantes :

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