Цветовой фрейм в зависимости от некоторых условий - PullRequest
1 голос
/ 27 июня 2019

Я хотел бы покрасить кадр данных на основе условия ниже

   LL    UL   col_1   col_2   col_3   col_4 
1   0    10     5       -6      13      46
2   3    12     0        5       8      55
3 NaN   NaN    -9        8       4       5

Я хочу покрасить col_1 col_2 col_3 и col_4, если значения ниже, чем столбец LL или выше UL в каждом ряду.

Если ниже, закрасьте его красным.Если выше, закрасьте его зеленым.

Более того, если нет верхнего и нижнего пределов, ничего не делайте в этой строке.

Спасибо!

Результаты могут выглядетькак это enter image description here

1 Ответ

1 голос
/ 27 июня 2019

Сравните все столбцы по LL и UL столбцам и верните стиль данных DataFrame, заполненный numpy.select:

def highlight(x):
    c1 = 'background-color: red'
    c2 = 'background-color: green'
    c3 = '' 
    m1 = x.lt(x['LL'], axis=0)
    m2 = x.gt(x['UL'], axis=0)
    #if necessary set first 2 columns to False
    m1.iloc[:, :2] = False
    m2.iloc[:, :2] = False

    out = np.select([m1, m2], [c1, c2], default=c3)
    return pd.DataFrame(out, index=x.index, columns=x.columns)

df.style.apply(highlight, axis=None)

df.style.apply(highlight, axis=None).to_excel('file.xlsx', index=False)

pic

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...