如何根据数据框列中的数字分配分类值?

how to assign categorical values according to numbers in a column of a dataframe?

我有一个包含列 'score' 的数据框。它包含从 1 到 10 的分数。我想创建一个新列“颜色”,它根据分数给出列颜色。

例如如果分数为 1,则颜色值应为“#75968f”,如果分数为 2,则颜色值应为“#a5bab7”。即我们需要颜色 ["#75968f", "#a5bab7", "#c9d9d3", "#e2e2e2","#f1d4Af", "#dfccce", "#ddb7b1", "#cc7878", "#933b41", “#550b1d”] 得分分别为 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]。

不使用循环是否可以做到这一点? 如果您在理解问题时遇到问题,请告诉我。

Series.map 与通过压缩两个列表生成的字典一起使用,或者如果需要按列表长度范围 colors 可以使用 enumerate:

df = pd.DataFrame({'score':[2,4,6,3,8]})

colors = ["#75968f", "#a5bab7", "#c9d9d3", "#e2e2e2","#f1d4Af", 
          "#dfccce", "#ddb7b1", "#cc7878", "#933b41", "#550b1d"]
scores = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

df['new'] = df['score'].map(dict(zip(scores, colors))) 

df['new1'] = df['score'].map(dict(enumerate(colors, 1)))   
print (df)
   score      new     new1
0      2  #a5bab7  #a5bab7
1      4  #e2e2e2  #e2e2e2
2      6  #dfccce  #dfccce
3      3  #c9d9d3  #c9d9d3
4      8  #cc7878  #cc7878