Как применить разные стили с условием, используя pandas - PullRequest
1 голос
/ 15 апреля 2020

Я хочу применить разные цвета фона к столбцу в DataFrame в соответствии со значением, найденным в другом списке равной длины. Мои данные (это игрушечный пример) имеют следующую структуру:

Username    Password    Indications New_name    Mr/Mrs  Balance
Carlos       xxx         LoreIpsum  Corona      Mrs     100
Daniel       yyy         LoreIpsum  Corona      Mrs     200
Guille       zzz         LoreIpsum  Corona      Mrs     300

Я работаю над инфраструктурой автоматизации тестирования. В какой-то момент мне нужно прочитать значения (столбец balance ) с веб-сайта и сравнить их со значениями, которые я прочитал из Excel. После этого я добавляю Истину или Ложь в список. Таким образом, если первые два значения чтения равны данным в моей электронной таблице, а третье неверно, мой список будет выглядеть так:

In:  Print(checkList)
Out: [True, True, False]

Я нашел, как с помощью этого применить стиль к строке команда:

df.style.applymap(lambda x: 'background-color: red' if Condition else 'background-color: green', subset=['Balance'])

Моя проблема в том, что я не знаю, как перебирать строки, а также список с логическими значениями, в приведенной выше строке кода применяется одинаковое условие ко всем строкам. Я могу предоставить дополнительные объяснения, если это необходимо.

1 Ответ

1 голос
/ 15 апреля 2020

Вы можете создать DataFrame, заполненный background-color с условиями, например, из вашего списка в Styler.apply:

checkList =  [True, True, False]

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

    #if necessary pass condition
    #checkList = x['Balance'] < 300
    #empty DataFrame of styles
    df1 = pd.DataFrame('', index=x.index, columns=x.columns)
    #set Balance column by condition in list (necessary same length like df)
    df1['Balance'] = np.where(checkList, c1, c2)
    return df1


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