首页 > 解决方案 > 如何为数据框中的多个项目创建颜色字典?

问题描述

我在数据框列中有 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)',
#....
}

标签: pythonpandasdictionarycolorsplotly

解决方案


很简单,只需获取颜色列表,然后沿轴连接。

例如

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'}

推荐阅读