按两列分组DataFrame时某列含两个指定值如何高亮对应行
实现方案
整体逻辑分为两步:首先按[vertex, hour]分组判断每个分组是否同时包含两个目标值,生成对应行的高亮掩码;再通过pandas的样式系统给符合条件的行设置高亮格式。
import pandas as pd # 示例数据 d = {'vertex': [0,0,0,1,1] ,'hour': [1, 1,2,1,2], 'value': ['sun', 'watermelon','sun','watermelon','sun']} df = pd.DataFrame(data=d) # 1. 生成高亮掩码:判断每个分组是否同时包含sun和watermelon,结果广播到每一行 highlight_mask = df.groupby(['vertex', 'hour'])['value'].transform( lambda x: {'sun', 'watermelon'}.issubset(x) ) # 2. 定义高亮样式函数 def row_highlight(row, mask): # 符合条件的行设置黄色背景,可自行修改颜色值 return ['background-color: #fff2ac'] * len(row) if mask[row.name] else [''] * len(row) # 3. 应用样式 styled_df = df.style.apply(row_highlight, axis=1, mask=highlight_mask)
效果验证
- 运行后在Jupyter Notebook/Lab环境直接输出
styled_df即可看到高亮效果,示例中vertex为0、hour为1的前两行会被高亮,其余行无样式,完全匹配需求。 - 如果需要导出结果:
- 导出为带样式的HTML文件:调用
styled_df.to_html('highlight_result.html', index=False) - 导出为带高亮的Excel文件:先安装
openpyxl依赖,再调用styled_df.to_excel('highlight_result.xlsx', engine='openpyxl', index=False)
- 导出为带样式的HTML文件:调用
内容的提问来源于stack exchange,提问作者Ryszard Eggink
相关产品推荐
相关产品推荐

