熊猫有条件地以粗体格式设置字段

Geo*_*ler 4 python formatting pandas

我有一个熊猫数据框:

import pandas as pd
import numpy as np

df = pd.DataFrame({'foo':[1,2, 3, 4],
                   'bar':[[1,2,0.04], [1,2,0.04], [1,2,0.06], np.nan]})
display(df)

def stars(x, sign_level):
    if x is np.nan:
        return ''
    else:
        p_value = x[2]
        if p_value < sign_level:
            return '*'
        else:
            return ''

df['marker'] = df.bar.apply(stars, sign_level=0.05)
df
Run Code Online (Sandbox Code Playgroud)

如果结果被认为是重要的,而不是添加带有星号的列,是否可以将单元格(如在 Excel 工作表中)格式化为粗体?

在一行中以粗体显示 DataFrame() 值似乎只能格式化整行 - 我只想重新格式化特定单元格

有条件地格式化 Python pandas 单元格

看起来很相似,尽管它们只更改背景,而不是粗体格式。

编辑

下面的代码已经可以更改背景颜色 - 我只是不知道如何将格式设置为粗体。

def highlight_significant(x, sign_level):
    if x is np.nan:
        return ''
    else:
        if isinstance(x, list):
            p_value = x[2]
            color = 'lightgreen' if p_value < sign_level else ''
            if p_value < sign_level:
                return 'background-color: %s' % color
            else:
                return ''
        else:
            return ''

df.style.applymap(highlight_significant, sign_level=0.05)
Run Code Online (Sandbox Code Playgroud)

the*_*ony 9

这可能有助于...

设置数据框

import pandas as pd
import numpy as np

np.random.seed(24)
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4), columns=list('BCDE'))],
               axis=1)
df.iloc[0, 2] = np.nan
Run Code Online (Sandbox Code Playgroud)

创建功能,您可以根据您定义的条件应用添加粗体

def negative_bold(val):


    bold = 'bold' if val < 0 else ''


    return 'font-weight: %s' % bold
Run Code Online (Sandbox Code Playgroud)

将函数应用到数据框的样式

s = df.style.applymap(negative_bold)
Run Code Online (Sandbox Code Playgroud)

查看数据框,您应该发现所有负数都是粗体

在此处输入图片说明

我在这里查看https://mode.com/example-gallery/python_dataframe_styling/和这里https://pandas.pydata.org/pandas-docs/stable/user_guide/style.html

编辑添加到这个答案......

两种风格的结合

我有两个功能,一个突出显示黄色数字是负数,另一个使数字为负数时加粗

Negative_yellow

def negative_yellow(val):


    color = 'yellow' if val < 0 else ''


    return 'background-color:' + color  
Run Code Online (Sandbox Code Playgroud)

负粗体

def negative_bold(val):


    bold = 'bold' if val < 0 else ''


    return 'font-weight: %s' % bold
Run Code Online (Sandbox Code Playgroud)

我像这样应用这两个数据框

df.style.\
    applymap(negative_yellow).\
    applymap(negative_bold)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我想有更优雅的方法可以做到这一点。希望这可以帮助 :)