You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Pandas的background_gradient中忽略值为100的最大值以生成热力图

解决方案:忽略100值的热力图样式

要实现忽略所有值为100的元素应用颜色渐变,同时保留NaN的白色背景,你可以用以下几种方法修改代码:

方法一:使用gmap自定义渐变计算矩阵

这个方法通过创建一个仅包含非100值的矩阵供渐变计算使用,同时保持原始数据的显示,最后将100值的单元格设为白色:

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}})

# 创建用于渐变计算的矩阵,将100替换为NaN
gradient_map = df.where(df != 100)

# 应用渐变+设置NaN和100为白色
df.style.background_gradient(cmap='RdYlGn', axis=1, gmap=gradient_map)\
  .highlight_null(null_color='white')\
  .applymap(lambda val: 'background-color: white' if val == 100 else '')

解释

  • gmap参数指定了颜色渐变的计算依据,我们把100替换为NaN后,这些值就不会参与渐变的颜色映射计算。
  • applymap专门为值为100的单元格设置白色背景,和NaN保持一致。

方法二:限定渐变范围+高亮100值

先计算出排除100后的数值范围,再用这个范围控制渐变,最后把100值的单元格设为白色:

# 获取排除100后的最小/最大值
vmin = df[df != 100].min().min()
vmax = df[df != 100].max().max()

# 应用渐变+设置NaN和100为白色
df.style.background_gradient(cmap='RdYlGn', axis=1, vmin=vmin, vmax=vmax)\
  .highlight_null(null_color='white')\
  .applymap(lambda val: 'background-color: white' if val == 100 else '')

解释

  • vminvmax限定了颜色渐变的数值区间,完全基于非100的值计算,避免100干扰渐变的颜色分布。
  • 同样用applymap把100值的单元格统一设为白色,和NaN视觉上保持一致。

方法三:用掩码选择渐变范围

通过布尔掩码直接指定需要应用渐变的单元格,再处理100和NaN的颜色:

# 创建掩码:选择所有不等于100的单元格
mask = df != 100

# 仅对掩码内的单元格应用渐变,再设置白色背景
df.style.background_gradient(cmap='RdYlGn', axis=1, subset=mask)\
  .highlight_null(null_color='white')\
  .applymap(lambda val: 'background-color: white' if val == 100 else '')

解释

  • subset=mask让渐变只作用于非100的单元格,100的单元格默认保持背景色,再通过applymap统一设为白色。
  • 这种方法更直观,明确控制渐变的作用范围。

内容的提问来源于stack exchange,提问作者Sergio Polimante

火山引擎 最新活动