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

如何通过groupby和styler为分组指定日期的单元格着色高亮

Pandas按分组高亮指定日期的单元格

首先构造你提供的DataFrame和分组日期规则:

import pandas as pd

# 构造原始数据
df = pd.DataFrame({
    'Group': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B'],
    'Date': ['01-01-2023', '01-02-2023', '01-03-2023', '01-04-2023',
             '02-03-2023', '02-04-2023', '02-05-2023', '02-06-2023',
             '02-07-2023', '02-08-2023'],
    'Data1': [22, 24, 10, 30, 24.5, 26.5, 12.5, 32.5, 27, 29],
    'Data2': [23, 20, 20, 32, 26.5, 23.5, 23.5, 35.5, 30, 27]
})

# 把分组日期整理成字典,方便统一调用
highlight_dates = {
    'A': ['01-02-2023', '01-04-2023'],
    'B': ['02-03-2023', '02-08-2023']
}

方法一:逐行判断高亮(简单直接)

自定义函数逐行检查日期是否属于对应分组的高亮列表,给目标单元格添加样式:

def highlight_target_dates(row):
    # 获取当前行的分组和日期
    current_group = row['Group']
    current_date = row['Date']
    # 初始化样式列表,默认无样式
    style_list = [''] * len(row)
    # 如果当前日期在对应分组的高亮列表中,给Date列单元格设黄色背景
    if current_date in highlight_dates.get(current_group, []):
        date_col_pos = row.index.get_loc('Date')
        style_list[date_col_pos] = 'background-color: yellow'
    return style_list

# 应用样式到表格
styled_table = df.style.apply(highlight_target_dates, axis=1)
# 显示样式化后的表格
styled_table

如果需要高亮整行而非仅Date列,修改函数如下:

def highlight_target_rows(row):
    current_group = row['Group']
    current_date = row['Date']
    if current_date in highlight_dates.get(current_group, []):
        return ['background-color: yellow'] * len(row)
    return [''] * len(row)

styled_table = df.style.apply(highlight_target_rows, axis=1)

方法二:结合groupby分组处理

利用styler的by参数按Group分组,对每个分组单独处理高亮逻辑:

def highlight_group_specified_dates(group):
    # 获取当前分组名称
    group_name = group.name
    # 生成掩码:标记分组内需要高亮的行
    highlight_mask = group['Date'].isin(highlight_dates.get(group_name, []))
    # 创建样式DataFrame,默认无样式
    style_df = pd.DataFrame('', index=group.index, columns=group.columns)
    # 给符合条件的Date列单元格设置背景色
    style_df.loc[highlight_mask, 'Date'] = 'background-color: yellow'
    return style_df

# 按Group分组应用样式
styled_table = df.style.apply(highlight_group_specified_dates, axis=None, by='Group')
styled_table

两种方法都能实现需求,第一种代码更简洁,第二种更贴合你想用groupby的思路。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:57:09