根据布尔列突出显示行

Highlight row based on boolean column

有一个数据框,我为其创建了布尔列 'Late Submission',其中 'True' 表示它迟到了,'False' 表示准时。

我想用红色突出显示 'True' 行,用绿色突出显示 'False' 行,但我似乎无法让它工作,因为我对 Python 还是很陌生。我试过下面的代码,知道为什么它不起作用吗?

def highlight_late(s):
    if s['Late Submission'] == True:
        return 'background-color: red'
    elif s['Late Submission'] == False:
        return 'background-color: green'
    
df7.style.apply(highlight_late, axis = 1)

给出的错误是:

Result has shape: (281556,)
Expected shape:   (281556, 6)

提前致谢

我用这个简单的 df 来展示它是如何工作的,基于这个 pandas doc

import pandas as pd
import numpy as np
df = pd.DataFrame({'a': np.random.randint(0, 10, 10), 'b': np.random.randint(0, 10, 10), 'late': np.random.choice([0, 1], 10).astype(np.bool)})

这给了我们:

|    |   a |   b | late   |
|---:|----:|----:|:-------|
|  0 |   3 |   2 | False  |
|  1 |   1 |   0 | False  |
|  2 |   3 |   6 | False  |
|  3 |   0 |   1 | True   |
|  4 |   6 |   7 | True   |
|  5 |   0 |   0 | False  |
|  6 |   0 |   7 | False  |
|  7 |   6 |   4 | True   |
|  8 |   7 |   0 | True   |
|  9 |   7 |   7 | False  |

现在我们使用一个函数来应用样式:

def highlight_late(s):
    return ['background-color: red' if s_ else 'background-color: green' for s_ in s]

然后:

df.style.apply(highlight_late, subset=['late'])

结果:

借用Albo的样本df。 如果要为整行着色,可以将代码调整为:

def highlight_late(s):
    return ['background-color: red' if s['late'] else 'background-color: green' for s_ in s]

df.style.apply(highlight_late, axis=1)

哪个会给你: