首页 > 解决方案 > Pandas 映射语法

问题描述

这种映射的“熊猫”语法是什么?

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

输出为

['red', 'black', 'red', 'red', 'black', 'red', 'black']

标签: pythonpandas

解决方案


Series.map与由创建的字典一起使用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

如果所有索引匹配(这意味着列的最大值等于或与 list 的长度相同color)可以使用 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

推荐阅读