如何高亮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
相关产品推荐
相关产品推荐

