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

Python:如何根据行sale_hours与列小时条件为DataFrame值标黄

需求说明

现有如下销售计划DataFrame表格:

itemsale_hours0123456789101112
item1[1-2]0.30.30.30.30.30.30.20.20.20.30.30.30.3
item2[11-2]0.40.50.40.50.50.40.30.30.30.40.50.40.5
item3[6-7][10-1]0.20.20.20.20.20.20.10.20.20.20.20.20.2

需要实现:根据列对应的小时(0-12)与每行sale_hours字段指定的范围,若列小时处于该范围,则将对应单元格标黄高亮。

技术解决方案

以下是基于Python Pandas的实现步骤:

1. 解析sale_hours字段,生成高亮小时列表

定义解析函数,处理单个区间、多个区间、跨天区间(如[11-2]代表11、12、0、1、2):

import re
import pandas as pd

def parse_sale_hours(hours_str):
    # 提取所有区间字符串
    ranges = re.findall(r'\[(\d+-\d+)\]', hours_str)
    highlight_hours = set()
    
    for r in ranges:
        start, end = map(int, r.split('-'))
        if start <= end:
            # 正常连续区间,如1-2:包含1、2
            highlight_hours.update(range(start, end + 1))
        else:
            # 跨天区间,如11-2:包含11、12、0、1、2
            highlight_hours.update(range(start, 13))
            highlight_hours.update(range(0, end + 1))
    
    return highlight_hours

2. 创建样式函数,应用高亮规则

遍历每个单元格,判断当前列小时是否在该行的高亮列表中,符合条件则添加黄色背景样式:

def highlight_sale_hours(row):
    highlight_hours = parse_sale_hours(row['sale_hours'])
    styles = []
    for col in row.index:
        if col in ['item', 'sale_hours']:
            styles.append('')
        else:
            hour = int(col)
            styles.append('background-color: yellow' if hour in highlight_hours else '')
    return styles

3. 应用样式到DataFrame

假设你的DataFrame名为sale_plan,执行以下代码生成带高亮的表格:

# 按行应用样式
styled_df = sale_plan.style.apply(highlight_sale_hours, axis=1)
# 直接显示表格(Jupyter环境中)或导出为HTML
styled_df

补充说明

  • 支持所有示例中的区间格式,包括多区间组合。
  • 若需导出结果,可使用styled_df.to_html('highlighted_sale_plan.html')保存为HTML文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:14:54