3 回答
TA贡献1943条经验 获得超7个赞
有点晚了,但供以后参考。
我遇到了同样的问题,这是我解决的方法:
import pandas as pd
import numpy as np
dt = pd.DataFrame({'col1': [1,2,3,4,5], 'col2': [4,5,6,7,np.nan], 'col3': [8,2,6,np.nan,np.nan]})
先填入一个大值的nas
dt.fillna(dt.max().max()+1, inplace=True)
将此最大值的字体着色为白色的函数
def color_max_white(val, max_val):
color = 'white' if val == max_val else 'black'
return 'color: %s' % color
将最大值的背景着色为白色的函数
def highlight_max(data, color='white'):
attr = 'background-color: {}'.format(color)
if data.ndim == 1: # Series from .apply(axis=0) or axis=1
is_max = data == data.max()
return [attr if v else '' for v in is_max]
else: # from .apply(axis=None)
is_max = data == data.max().max()
return pd.DataFrame(np.where(is_max, attr, ''),
index=data.index, columns=data.columns)
把所有东西放在一起
max_val = dt.max().max()
dt.style.format("{:.2f}").background_gradient(cmap='Blues', axis=None).applymap(lambda x: color_max_white(x, max_val)).apply(highlight_max, axis=None)
TA贡献1852条经验 获得超1个赞
这对我来说很好用
df.style.applymap(lambda x: 'color: transparent' if pd.isnull(x) else '')
TA贡献1848条经验 获得超6个赞
我的背景渐变仍会使用最大值来计算颜色渐变。我实现了@night-train 的设置颜色图的建议,然后使用了两个函数:
import copy
cmap = copy.copy(plt.cm.get_cmap("Blues"))
cmap.set_under("white")
def color_nan_white(val):
"""Color the nan text white"""
if np.isnan(val):
return 'color: white'
def color_nan_white_background(val):
"""Color the nan cell background white"""
if np.isnan(val):
return 'background-color: white'
然后再次将它们应用到我的数据帧中,为方便起见,从@quant 中借用了一点:
(df.style
.background_gradient(axis='index')
.applymap(lambda x: color_nan_white(x))
.applymap(lambda x: color_nan_white_background(x))
)
然后它完美地工作。
添加回答
举报