如何使用Python按多条件为DataFrame指定列的单元格着色
解决方案
你之前的代码错误地将日期列作为判断条件,实际上你数据里各环节列的数值本身就是时长天数,直接判断对应数值即可,以下是可直接运行的实现代码:
import pandas as pd from datetime import datetime, timedelta # 构造示例数据 data = {'Date': ['2021-10-01', '2021-10-02', '2021-10-03', '2021-10-04','2021-10-05','2021-10-06','2021-10-07','2021-10-08'], 'Waiting_for': [5, 0, 0, 10,34,10,4,12], 'Picking': [20,12,5,9,0,21, 19, 18], 'Shipped': [20, 21,7,9,12, 19,0, 18], 'Received': [5,7,10,9,20,6,10,5]} df = pd.DataFrame(data) df['Date'] = pd.to_datetime(df['Date']) # 定义各环节阈值,不在字典中的列不做高亮处理 threshold_map = { 'Waiting_for': 32, 'Picking': 34, 'Shipped': 36 } def highlight_cells(val, col_name): # 非目标列、值≤0、未超过阈值都返回空样式 if col_name not in threshold_map or val <= 0 or val <= threshold_map[col_name]: return '' # 符合条件的单元格返回高亮样式,颜色可自行调整 return 'background-color: yellow' # 逐列应用样式,把列名作为参数传给高亮函数 styled_df = df.style.apply(lambda col: [highlight_cells(v, col.name) for v in col], axis=0) # 【可选】在Jupyter环境中直接展示效果 # styled_df # 【可选】导出为带格式的Excel文件 # styled_df.to_excel('高亮订单数据.xlsx', engine='openpyxl', index=False)
逻辑说明
- 首先定义各环节的阈值映射,后续新增环节只需要在字典里添加对应阈值即可
- 逐列遍历判断:只有需要校验的环节列才会走高亮判断逻辑
- 同时满足两个条件的单元格才会添加高亮样式:数值大于0、数值超过对应环节的阈值
- 高亮颜色可自行修改
background-color后的取值,支持颜色名、十六进制色值等标准CSS颜色格式
内容的提问来源于stack exchange,提问作者Adria Marimon
相关产品推荐
相关产品推荐

