Python 将字段有条件地格式化为粗体

Python 将字段有条件地格式化为粗体,python,pandas,formatting,Python,Pandas,Formatting,我有一个数据框: 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:

我有一个数据框:

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
将熊猫作为pd导入
将numpy作为np导入
df=pd.DataFrame({'foo':[1,2,3,4],
‘bar’:[1,2,0.04],[1,2,0.04],[1,2,0.06],np.nan]})
显示(df)
def星形(x,符号等级):
如果x是np.nan:
返回“”
其他:
p_值=x[2]
如果p_值<符号水平:
返回'*'
其他:
返回“”
df['marker']=df.bar.apply(星号,符号水平=0.05)
df
如果结果被认为是重要的,是否可以将单元格(如Excel表格中的单元格)设置为粗体,而不是添加带星号的列

似乎能够格式化整行-我只想重新格式化一个特定的单元格

看起来很相似,虽然它们只改变背景,而不是粗体的格式

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)
编辑 下面的代码已经可以更改背景颜色了-我只是不知道如何设置为粗体

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)
def高亮显示(x,符号级别):
如果x是np.nan:
返回“”
其他:
如果isinstance(x,列表):
p_值=x[2]
颜色='浅绿色',如果p_值<符号\u级别其他''
如果p_值<符号水平:
返回“背景颜色:%s”%s
其他:
返回“”
其他:
返回“”
df.style.applymap(突出显示有效,符号级别=0.05)
这可能会有帮助

设置数据帧

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
创建可根据定义的条件应用以添加粗体的函数

def negative_bold(val):


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


    return 'font-weight: %s' % bold
看看数据框,你会发现所有的负数都是粗体的

我到处找

编辑添加到此答案中

结合两种风格

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

负黄

def negative_yellow(val):


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


    return 'background-color:' + color  


我想有更优雅的方式来做这件事。希望这有帮助:)

酷。多个样式(颜色+字体重量)也可以组合吗?事实上,这可以通过简单地组合
foo;bar
用分号表示各个样式。我更新了答案,将两个函数组合在一起,在数字为负数的@GeorgHeiler处使用粗体和黄色。可能有更优雅的方法可以做到这一点:)
def negative_bold(val):


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


    return 'font-weight: %s' % bold
df.style.\
    applymap(negative_yellow).\
    applymap(negative_bold)