Условное форматирование цвета в Pandas - PullRequest
1 голос
/ 05 июля 2019

Задача в условном форматировании (я думаю, с использованием стилей) Python, Pandas

Есть табличка с двумя столбцами

во второй таблице должны быть выделены условия:

  1. зеленым, если номер 1-го столбца превышает второй;
  2. желтым, если номер 1-го столбца равен второму;
  3. красным, если номер 1-го столбца меньше второгоодин. [enter image description here

Спасибо за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

Идея заключается в создании нового DataFrame, заполненного стилями по условию с помощью Styler.apply, для набора строк по условиям используется DataFrame.mask:

def highlight(x):
    c1 = 'background-color: green'
    c2 = 'background-color: yellow'
    c3 = 'background-color: red'

    m1 = x.iloc[:, 0] > x.iloc[:, 1]
    m2 = x.iloc[:, 0] == x.iloc[:, 1]

    df1 = pd.DataFrame(c3, index=x.index, columns=x.columns)
    return df1.mask(m1, c1).mask(m2, c2)

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

РЕДАКТИРОВАТЬ:

Если необходимо установить только один столбец, используйте numpy.select:

def highlight(x):
    c1 = 'background-color: green'
    c2 = 'background-color: yellow'
    c3 = 'background-color: red'
    c = ''

    m1 = x.iloc[:, 0] > x.iloc[:, 1]
    m2 = x.iloc[:, 0] == x.iloc[:, 1]

    df1 = pd.DataFrame(c, index=x.index, columns=x.columns)
    df1.iloc[:, 1] = np.select([m1, m2], [c1, c2], default=c3)
    return df1
0 голосов
/ 05 июля 2019

Вы можете применить форматирование столбцов, используя pandas.DataFrame.style.apply и некоторые функции форматирования: https://pandas.pydata.org/pandas-docs/stable/user_guide/style.html

...