如何在Pandas中按条件高亮两行:B列含a的行及对应ID行
DataFrame多列联动高亮实现方案
需求说明
- 高亮DataFrame中B列所有值为"a"的单元格
- 当B列某行被高亮时,对应行的ID列单元格也需同步高亮
原实现代码(仅满足条件1)
import pandas as pd import numpy as np data = {'ID':[1,2,3,4,5,6,7,8,9,10], 'B':["a","b","c","a","e","f","a","h","c","a"], 'C': [5,7,8,9,12,3,60,55,20,14] } df = pd.DataFrame(data=data) (df .style .apply(lambda x: np.where(x == "a", 'background-color : red', ''),axis=1, subset=["B"]) )
优化后代码(满足两个条件)
方案一:简洁版
直接指定联动列范围,通过行级判断实现同步高亮:
import pandas as pd import numpy as np data = {'ID':[1,2,3,4,5,6,7,8,9,10], 'B':["a","b","c","a","e","f","a","h","c","a"], 'C': [5,7,8,9,12,3,60,55,20,14] } df = pd.DataFrame(data=data) (df .style .apply(lambda row: ['background-color: red' if row['B'] == 'a' else '' for _ in row], axis=1, subset=['ID', 'B']) )
方案二:灵活扩展版
适合后续需要新增更多联动列的场景,维护性更强:
import pandas as pd import numpy as np data = {'ID':[1,2,3,4,5,6,7,8,9,10], 'B':["a","b","c","a","e","f","a","h","c","a"], 'C': [5,7,8,9,12,3,60,55,20,14] } df = pd.DataFrame(data=data) def highlight_linked_cols(df): # 筛选出B列为"a"的行掩码 highlight_mask = df['B'] == 'a' # 初始化空样式矩阵 style_matrix = pd.DataFrame('', index=df.index, columns=df.columns) # 为目标行的指定列设置高亮样式 style_matrix.loc[highlight_mask, ['ID', 'B']] = 'background-color: red' return style_matrix df.style.apply(highlight_linked_cols, axis=None)
实现逻辑说明
- 方案一:逐行判断B列值,若符合条件则给当前行的ID、B列统一添加红色背景样式
- 方案二:先生成全行样式模板,再通过掩码精准定位需要高亮的行和列,批量设置样式,便于后续扩展联动列范围
内容的提问来源于stack exchange,提问作者Hansson
相关产品推荐
相关产品推荐

