You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将0-1值DataFrame作为颜色渐变映射应用到Pandas DataFrame?

解决Pandas Styler中background_gradient的gmap与cmap参数问题

先搞懂两个核心参数

  • gmap:这就是控制颜色深浅的"参考数值矩阵",它的形状必须和你要上色的表格区域(也就是subset指定的部分)完全匹配。你用color_df的Week列当gmap是对的,但必须保证它和exDf的Week列在行数、列数、列顺序上完全一致——简单说就是,每一行对应同一支队伍,每一列对应同一周,这样颜色才会精准对应到你要标记的队伍战绩。
  • cmap:这是你要用到的颜色渐变模板。你需要的是"0对应红色,1对应绿色"的渐变,直接用现成的'RdYlGn'调色板就够(红-黄-绿过渡),如果想要更纯粹的红到绿,也可以自定义调色板。

修正后的代码示例

# 先统一提取Week列,确保exDf和color_df的目标列完全匹配
week_columns = exDf.filter(regex='Week').columns

# 准备要上色的表格区域和对应的颜色参考矩阵
target_subset = week_columns
color_reference = color_df[week_columns]

# 生成带背景渐变的样式
styled_table = exDf.style.hide(axis='index')\
    .background_gradient(
        axis=0,  # 按列(每周)独立计算渐变,也就是每周内各队伍单独对比
        subset=target_subset,
        gmap=color_reference,
        cmap='RdYlGn',
        vmin=0,  # 手动指定颜色映射的最小值,对应红色
        vmax=1   # 手动指定颜色映射的最大值,对应绿色
    )

# 导出为图片
dfi.export(styled_table, f'{year}_Week_{weekNum}.png')

关键细节说明

  1. vmin和vmax必须加:因为你的color_df已经是0-1的归一值,手动指定这两个参数可以避免Styler自动重新计算gmap的极值,确保0对应最深的红色,1对应最深的绿色,不会因为某一周的数值范围变化打乱颜色逻辑。
  2. axis参数的作用:axis=0表示按列处理,也就是每一周的队伍战绩单独进行颜色渐变,符合你每周对比所有队伍的需求;如果设成axis=1就是按行(每支队伍跨周对比),这不是你要的效果。
  3. 形状匹配检查:可以用assert exDf[week_columns].shape == color_df[week_columns].shape来提前验证两个矩阵的形状是否一致,避免出现颜色错位的问题。

内容的提问来源于stack exchange,提问作者Tyler Moore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:01:47