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

