我有这个数据框:
import pandas as pd
df = pd.DataFrame({'2021-04': {'2021-04': 100.0, '2021-05': float("nan"), '2021-06': float("nan")},
'2021-05': {'2021-04': 9.599326432568967, '2021-05': 100.0, '2021-06': float("nan")},
'2021-06': {'2021-04': 7.952995602884856,
'2021-05': 5.549312064243707,
'2021-06': 100.0}})
我想按线绘制它的热图,但忽略最大值,因为它们比其他值高得多。
我也想给nan一个浅色,比如白色,但我把这部分做对了。
这是我到目前为止得到的:
df.style.background_gradient(cmap ='RdYlGn', axis=1)\
.highlight_null(null_color='white')
产生此表:
如何应用渐变忽略等于 100 的值?
如果我理解正确,这里有一个建议(深受@quant的回答这里的启发):
import pandas as pd
import numpy as np
df = pd.DataFrame({'2021-04': {'2021-04': 100.0, '2021-05': float("nan"), '2021-06': float("nan")},
'2021-05': {'2021-04': 9.599326432568967, '2021-05': 100.0, '2021-06': float("nan")},
'2021-06': {'2021-04': 7.952995602884856,
'2021-05': 5.549312064243707,
'2021-06': 100.0}})
def highlight_max(data, color='white'):
attr = f'background-color: {color}'
if data.ndim == 1:
is_max = data == data.max()
return [attr if v else '' for v in is_max]
else:
is_max = data == data.max().max()
return pd.DataFrame(np.where(is_max, attr, ''),
index=data.index, columns=data.columns)
out = (df.style.background_gradient(cmap ='RdYlGn', axis=1)
.highlight_null(null_color='white')
.applymap(lambda x: 'color: white' if pd.isnull(x) else 'color: black')
.apply(highlight_max, axis=None)
)
>>> print(out)
您可以使用:
df.replace(100, np.nan).style.background_gradient(cmap ='RdYlGn', axis=1)\
.highlight_null(color='white')
如果“100”值没有用。