Ответ 1
Я бы создал фиктивный столбец для того, является ли наблюдение больше 0.
In [39]: data['positive'] = data['values'] > 0
In [40]: data
Out[40]:
values positive
a -15.0 False
b 10.0 True
c 8.0 True
d -4.5 False
[4 rows x 2 columns]
In [41]: data['values'].plot(kind='barh',
color=data.positive.map({True: 'g', False: 'r'}))
Также вы можете быть осторожны, чтобы имена столбцов не пересекались с атрибутами DataFrame. DataFrame.values
предоставляет базовый массив для DataFrame. Наличие перекрывающихся имен не позволяет использовать синтаксис df.<column name>
.