Как закрасить логические значения разными цветами в панде - PullRequest
0 голосов
/ 08 ноября 2018
Customer_id   Name    Age  Balance
        Q1   True   True     True
        W2   True   True     True
        E3   True  False     True
        T5   True   True    False
        Y6   True   True     True
        U7   True   True     True
        I8  False  False    False
        O9   True  False    False
        P0  False  False    False

Я хочу выделить или раскрасить слово 'TRUE' желтым цветом в приведенном выше кадре данных

Вот мой код, который я пробовал:

def color_negative_red(val):
    color = 'yellow' if val == 'TRUE' else 'black'
    return 'color: %s' % color
df = dataframe.style.\
       apply(color_negative_red).\
       to_excel('df.xlsx')

и я получаю ошибку ниже

ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index Customer_id')

Что я здесь не так делаю?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Попробуйте это (здесь вы можете использовать apply):

def f(x):
    df = x.copy()
    for i in df.columns:
        df.loc[df[i]=='TRUE',i]=='background-color: yellow'
    return df    

df=df.style.apply(f, axis=None)
0 голосов
/ 08 ноября 2018

Используйте Styler.applymap вместо apply:

dataframe.style.\
       applymap(color_negative_red).\
       to_excel('df.xlsx')

Вы также можете сравнить по True, если логическое значение, и 'True', если строка:

def color_negative_red(val):
    color = 'yellow' if val == True else 'black'
    return 'color: %s' % color

#python 3.6+ with f-strings
def color_negative_red(val):
    color = 'yellow' if val == True else 'black'
    return f'color: {color}'

#python bellow 3.6
def color_negative_red(val):
    color = 'yellow' if val == True else 'black'
    return 'color: {}'.format(color)

pic

Если хотите, также удалите значения индекса:

dataframe.style.\
       applymap(color_negative_red).\
       to_excel('df.xlsx', index=False)

pic1

...