Quel est le syntex « pandas » pour une telle cartographie ?

colors = ["red", "black"]
[colors[ind] for ind in [0, 1, 0, 0, 1, 0, 1]]

Avec une sortie de

['red', 'black', 'red', 'red', 'black', 'red', 'black']
2
Gideon Kogan 14 oct. 2020 à 12:57

1 réponse

Meilleure réponse

Utilisez Series.map avec dictionnaire créé par enumerate :

df = pd.DataFrame({'a':[0, 1, 0, 0, 1, 0, 1]})

colors = ["red", "black"]

df['b'] = df['a'].map(dict(enumerate(colors)))
print (df)
   a      b
0  0    red
1  1  black
2  0    red
3  0    red
4  1  black
5  0    red
6  1  black

Si toutes les correspondances d'index (cela signifie que la valeur maximale de la colonne est égale ou identique à la longueur de la liste color) est possible, utilisez la diffusion numpy :

colors = ["red", "black"]

df['b'] = np.array(colors)[:, None][df['a'].to_numpy()]
print (df)
   a      b
0  0    red
1  1  black
2  0    red
3  0    red
4  1  black
5  0    red
6  1  black
1
jezrael 14 oct. 2020 à 10:00