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

如何用df1.style.applymap()高亮两个日期DataFrame的差异单元格?

嘿,我来帮你解决这个DataFrame样式高亮的问题!你提到用applymap()的思路是对的,但要实现和df2的对应位置对比,我们可以换个更直接清晰的方式——用style.apply()结合差异矩阵来完成,这样不容易出错。

首先要确保两个DataFrame的索引、列名完全匹配,这样才能准确对应每个单元格的位置。接下来看具体步骤:

完整代码示例

import pandas as pd

# 构造你给出的两个DataFrame(如果已有数据可跳过这步)
df1 = pd.DataFrame({
    'Name': ['D1', 'D2', 'D3'],
    'A': ['2018-04-26', '2018-04-25', '2018-04-25'],
    'B': ['2018-04-24', '2018-04-23', '2018-04-26'],
    'C': ['2018-04-24', '2018-04-23', '2018-04-26']
}).set_index('Name')  # 将Name设为索引,保证行列严格对齐

df2 = pd.DataFrame({
    'Name': ['D1', 'D2', 'D3'],
    'A': ['2018-04-24', '2018-04-25', '2018-04-22'],
    'B': ['2018-04-23', '2018-04-23', '2018-04-24'],
    'C': ['2018-04-24', '2018-04-21', '2018-04-23']
}).set_index('Name')

# 定义样式函数:对比两个DataFrame的差异,返回样式矩阵
def highlight_different_cells(df, compare_df):
    # 创建空的样式DataFrame,初始无样式
    style_matrix = pd.DataFrame('', index=df.index, columns=df.columns)
    # 给所有值不相等的单元格设置红色字体样式
    style_matrix[df != compare_df] = 'color: red'
    return style_matrix

# 给df1应用样式
styled_df = df1.style.apply(highlight_different_cells, compare_df=df2, axis=None)

# 在Jupyter环境下运行会直接渲染带样式的表格
styled_df

关键细节说明

  1. 行列对齐:把Name设为索引是为了确保两个DataFrame的行、列完全对应,避免对比时因对齐问题出现错误结果。
  2. 样式矩阵逻辑:highlight_different_cells函数生成一个和df1结构完全一致的DataFrame,仅给差异单元格标记红色样式,其余保持默认。
  3. 参数传递:通过style.apply()的compare_df参数把df2传入样式函数,axis=None表示对整个DataFrame应用函数,而非按行/列拆分处理。

如果你的日期是datetime类型而非字符串也没关系——只要两个DataFrame的日期类型一致,df != compare_df的对比逻辑依然完全有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:49:34