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

如何高亮Pandas DataFrame指定列中重复分组内的差异值?

Pandas DataFrame分组高亮指定列的差异内容

实现思路

按指定分组列(如示例中的Name)分组,以每组的第一行作为基准(原始重复项),对指定目标列内与基准值不同的单元格添加高亮样式,支持自定义目标列列表。

代码实现

1. 构造示例数据

import pandas as pd

data = {
    'Name': ['A', 'A', 'B', 'C', 'C', 'C'],
    'Value1': [1, 2, 3, 4, 5, 4],
    'Value2': ['Cherry', 'Cherry', 'Rice', 'Potato', 'Potato', 'Egg']
}
df = pd.DataFrame(data)

2. 定义高亮函数

def highlight_diff_by_group(df, group_col, target_cols=None):
    # 默认处理除分组列外的所有列
    if target_cols is None:
        target_cols = [col for col in df.columns if col != group_col]
    
    # 获取每个分组的基准行(组内第一行)
    group_baselines = df.groupby(group_col).first()
    
    # 初始化样式矩阵,所有单元格默认无样式
    style_matrix = pd.DataFrame('', index=df.index, columns=df.columns)
    
    # 遍历每个分组,标记差异单元格
    for group_name, group_rows in df.groupby(group_col):
        baseline = group_baselines.loc[group_name]
        for col in target_cols:
            # 找出组内当前列与基准值不同的行
            diff_mask = group_rows[col] != baseline[col]
            # 给差异单元格设置黄色背景高亮
            style_matrix.loc[diff_mask.index, col] = 'background-color: yellow'
    
    return style_matrix

3. 应用样式并查看结果

# 示例:按Name分组,高亮Value1、Value2列的差异
styled_df = df.style.apply(highlight_diff_by_group, group_col='Name', target_cols=['Value1', 'Value2'], axis=None)

# 在Jupyter环境中直接运行即可渲染高亮后的表格
styled_df

关键说明

  • 自定义目标列:如果你的DataFrame有30列,仅需高亮B、C、D列,只需传入target_cols=['B', 'C', 'D']
  • 基准行选择:当前以组内第一行为基准,若需以组内众数或其他逻辑为基准,可修改groupby(group_col).first()为对应逻辑(如groupby(group_col).agg(lambda x: x.mode()[0]))
  • 样式自定义:修改background-color: yellow即可更换高亮样式,比如红色高亮用background-color: #ffcccc
  • 生效环境:该样式仅在支持HTML渲染的环境生效(如Jupyter Notebook/Lab、Streamlit等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:02:36