如何突出显示和格式化给定的列?

how to highlight and format a given column?

考虑下面的简单示例

df = pd.DataFrame({'text' : ['hello world'],
                   'var1' : [0.1],
                   'var2' : [0.2]})

#this highlights the highest number in red
def highlight_max(s, props = ''):
    return np.where(s == np.nanmax(s.values), props, '')

#this turns the numbers into percentages
df.style.format({'var1' : '{:,.2%}'.format,
                 'var2' : '{:,.2%}'.format})

我正在尝试以红色自动突出显示最高数字(按行)并将任何数字格式化为百分比。我分别拥有这两部分,但我不知道如何在一个 .style 调用中做到这一点。有什么想法吗?

谢谢!

highlight_max 是一个内置函数,我们可以链式调用来生成样式化的 table,或者将样式器存储为变量并重用它以应用多种样式:

numeric_cols = ['var1', 'var2']
(
    df.style.highlight_max(color='red', axis=1, subset=numeric_cols)
        .format('{:,.2%}'.format, subset=numeric_cols)
)

numeric_cols = ['var1', 'var2']
styler = df.style
styler.highlight_max(color='red', axis=1, subset=numeric_cols)
styler.format('{:,.2%}'.format, subset=numeric_cols)

也可以通过在 axis=1 上使用 Styler.apply 并将 props 定义为所需的 CSS 样式来使用用户定义函数:

#this highlights the highest number in red
def highlight_max(s, props = ''):
    return np.where(s == np.nanmax(s.values), props, '')

numeric_cols = ['var1', 'var2']
#this turns the numbers into percentages
(
    df.style
        .apply(highlight_max, props='background-color: red',
               subset=numeric_cols, axis=1)
        .format('{:,.2%}'.format, subset=numeric_cols)
)

所有选项都会生成样式化的 DataFrame:


如果需要,可以使用以下内容动态生成 numeric_cols 列列表:

numeric_cols = df.select_dtypes(include='number').columns

或:

numeric_cols = df.columns[(df.dtypes == 'int64') | (df.dtypes == 'float64')]