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

如何根据条件为pandas DataFrame的数值设置单元格颜色

DataFrame差异检测及颜色标记实现方案

实现逻辑

  • 先调用自定义equalize_length、equalize_width、equalize函数对齐两个待比对DataFrame的行列维度,将所有缺失值统一填充为字符串"nan",避免原生NaN值无法通过等值判断导致的逻辑错误
  • 逐单元格比对对齐后的两个DataFrame,存在差异的单元格内容格式化为原值 --> 新值,无差异单元格留空,结果存入DataFrame a
  • 基于差异字符串拆分出原值、新值,按三类规则匹配对应背景色,替代容易报错的直接np.select类型判断逻辑
  • 原值为nan(新增单元格内容)标记绿色,新值为nan(删除单元格内容)标记红色,双方均非nan(值修改)标记黄色

可复用代码

import pandas as pd
import numpy as np

# 此处可替换为你自行实现的equalize系列对齐函数
def equalize(df1, df2):
    # 统一对齐行索引
    common_index = df1.index.union(df2.index)
    df1 = df1.reindex(common_index)
    df2 = df2.reindex(common_index)
    # 统一对齐列
    common_cols = df1.columns.union(df2.columns)
    df1 = df1.reindex(columns=common_cols)
    df2 = df2.reindex(columns=common_cols)
    # 所有缺失值填充为字符串"nan",规避原生NaN判断异常
    return df1.fillna("nan"), df2.fillna("nan")

# ========== 以下为差异生成+颜色标记逻辑 ==========
# 1. 对齐两个待比对DataFrame,替换为你自己的两个原始DataFrame即可
df_old, df_new = equalize(待比对的原始DataFrame1, 待比对的原始DataFrame2)

# 2. 生成差异结果表a
a = pd.DataFrame(index=df_old.index, columns=df_old.columns, dtype="object")
for r in a.index:
    for c in a.columns:
        o = df_old.loc[r, c]
        n = df_new.loc[r, c]
        a.loc[r, c] = f"{o} --> {n}" if o != n else ""

# 3. 按规则设置单元格颜色
def set_cell_color(cell_val):
    if not cell_val:
        return ""
    old_v, new_v = cell_val.split(" --> ")
    if old_v == "nan":
        return "background-color: #2ecc71; color: #fff;" # 新增内容绿色
    if new_v == "nan":
        return "background-color: #e74c3c; color: #fff;" # 删除内容红色
    return "background-color: #f1c40f; color: #000;" # 修改内容黄色

# 应用样式得到最终带颜色的结果
# pandas 2.1.0以下版本用applymap,以上版本可直接替换为map
styled_result = a.style.applymap(set_cell_color)

之前np.select报错的核心原因

  • 未将缺失值统一转换为字符串"nan",原生np.nan不满足np.nan == np.nan的等值判断,会导致np.select的条件矩阵出现异常空值
  • 直接对未拆分的原值 --> 新值字符串做原值/新值的空判断,会触发类型不匹配错误
  • 若必须使用np.select,需提前拆分所有单元格的原值、新值生成三个独立的布尔矩阵,再传入条件列表,不能在np.select的条件参数里写嵌套的拆分、判断逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:01:02