python - 如何为数据框中的多个项目创建颜色字典?
问题描述
我在数据框列中有 40 多个独特的项目(例如'a'、'b'、'c'......)。我想创建一个颜色字典,而不必键入以下内容。所以每个独特的项目都有一个独特的颜色 - 我如何创建一个像下面这样的字典,它可以让我给每个项目一个独特的颜色。
任何帮助将不胜感激。
color_discrete_map = {'a':'rgb(42,9,4)',
'b':'rgb(111,203,209)',
'c':'rgb(55,165,172),',
'd':'rgb(29,127,136)',
'e':'rgb(2,84,92)',
'f':'rgb(4,37,42)',
#....
}
解决方案
很简单,只需获取颜色列表,然后沿轴连接。
例如
df_colors = pd.read_csv('https://raw.githubusercontent.com/codebrainz/color-names/master/output/colors.csv',header=None)
df_colors.columns = ['color_name', 'color_description', 'hex_value', 'r', 'g','b']
print(df_colors)
color_name color_description hex_value r g b
0 air_force_blue_raf Air Force Blue (Raf) #5d8aa8 93 138 168
1 air_force_blue_usaf Air Force Blue (Usaf) #00308f 0 48 143
2 air_superiority_blue Air Superiority Blue #72a0c1 114 160 193
3 alabama_crimson Alabama Crimson #a32638 163 38 56
4 alice_blue Alice Blue #f0f8ff 240 248 255
假设您的数据框具有唯一值,那么您可以沿着索引加入。
print(df)
name
0 a
1 b
2 c
3 d
df1 = df.join(df_colors[['r','g','b']].astype(str).agg(','.join,axis=1).to_frame('rgb'),how='left')
print(df1)
name rgb
0 a 93,138,168
1 b 0,48,143
2 c 114,160,193
3 d 163,38,56
如果你特别想要一个字典,你可以在创建两个迭代之后压缩。
n = df['name'].unique()
c = df_colors[['r','g','b']].astype(str).agg(','.join,axis=1).tolist()
dict(zip(n,c))
{'a': '93,138,168', 'b': '0,48,143', 'c': '114,160,193', 'd': '163,38,56'}
推荐阅读
- kubernetes - 使用 VS Code Kubernetes Extension 连接到外部集群
- python - 如何让玩家在pygame中进入下一个级别
- java - 重置 JDeveloper 的管理员密码 - WebLogic 集成服务器
- angular - Angular Error Handler - 如何从错误中获取组件上下文?
- dialogflow-es - Google Action 应该播放广播流
- php - 如何在 Laravel 数据库中存储多张图片
- intellij-idea - 调查整个分支历史,而不是特定文件(替代 SourceTree 历史选项)
- r - 在数据框中创建日期字段
- asp.net-mvc - WCF 返回 NULL 值
- couchbase - Couchbase 4.5 - 在 where 子句中使用数组时不覆盖索引