如果索引包含某些字符串,则定义颜色

时间:2019-01-29 11:53:59

标签: python pandas dataframe matplotlib bar-chart

我有以下数据框(例如)

          Value
Sample_A_1  5
Sample_B    1
Sample_A_2  2
Sample_D    3
Sample_F    4

并希望运行df['Value'].plot(kind='bar') 如果我想在索引字符串包含Sample_A时为条形定义颜色,并为其他样本定义其他颜色,我该怎么做?

1 个答案:

答案 0 :(得分:3)

想法是创建字典,用于通过包含索引的值指定颜色,然后是extract值和map,添加fillna来指定默认颜色(如果没有值匹配),最后传递给参数color

colors = {'Sample_A': 'r', 'Sample_B': 'b', 'Sample_D': 'g'}
pat = (r'({})'.format('|'.join(colors.keys())))
c = df.index.str.extract(pat,expand=False).map(colors.get).fillna('y')

df['Value'].plot(kind='bar', color=c)

graph

另一种解决方案是通过用str.contains按字典循环来为颜色添加新列:

for k, v in colors.items():
    df.loc[df.index.str.contains(k), 'color'] = v
print (df)
            Value color
Sample_A_1      5     r
Sample_B        1     b
Sample_A_2      2     r
Sample_D        3     g
Sample_F        4   NaN

df['Value'].plot(kind='bar', color=df['color'].fillna('y'))