如何基于另一DataFrame列的值高亮目标DataFrame的行或字符串
Pandas匹配DataFrame数据并高亮行/单元格
下面提供两种简单可行的实现方式,你可以根据需求选择:
方法1:高亮匹配的整行
这种方式能直观展示所有匹配到的基因对应的完整数据行,代码实现简单:
import pandas as pd # 初始化数据集 dataset1 = {'Gene Name':['ampC','fliC','ompC','fruB','yobH','gltP','ruvA','yacC','folD'], 'FoldChange':['4.54','5.65','7.89','6.45','10.67','4.63','2.65','9.45','5.79'], 'pvalue':['0','0','0','0','0','0','0','0','0']} df1= pd.DataFrame(dataset1) dataset2 = {'Gene Name':['gltP','ruvA','yacC','folD']} df2 = pd.DataFrame(dataset2) # 获取需要匹配的基因列表 target_genes = df2['Gene Name'].tolist() # 定义高亮整行的规则 def highlight_matching_rows(row): # 匹配到目标基因时,给整行设置浅黄色背景 return ['background-color: #fff2cc'] * len(row) if row['Gene Name'] in target_genes else [''] * len(row) # 应用样式并展示(Jupyter环境中直接运行即可看到效果) styled_df = df1.style.apply(highlight_matching_rows, axis=1) styled_df # 若需导出为可查看的HTML文件,执行以下代码 # styled_df.to_html('highlighted_gene_table.html')
方法2:仅高亮匹配的Gene Name单元格
如果只需要突出显示匹配的基因名称,可针对单列设置样式:
# 定义高亮单个单元格的规则 def highlight_matching_gene(val): # 匹配到目标基因时,设置单元格背景色 return 'background-color: #ffeeba' if val in target_genes else '' # 仅对Gene Name列应用样式 styled_df = df1.style.applymap(highlight_matching_gene, subset=['Gene Name']) styled_df
说明
- 两种方法都基于Pandas的
Styler模块实现,在Jupyter Notebook/ Lab中运行可直接看到高亮效果; - 颜色值可根据需求替换(比如
#ffcccc对应浅红色); - 若要导出结果,使用
to_html()方法保存为HTML文件,用浏览器打开即可查看高亮效果。
内容的提问来源于stack exchange,提问作者Melissa Arroyo-Mendoza
相关产品推荐
相关产品推荐

