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)