Créer une nouvelle colonne dans la trame de données python 3 (pandas) en fonction de la valeur dans une autre colonne
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
- Créer une nouvelle colonne df["city-north"] = df['city'] where state = "Illinois"
- 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
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