如何根据数据框列中的数字分配分类值?
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
我有一个包含列 '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