如何使用Pandas 16.2比较两个DataFrame并实现独有单元格条件格式高亮
嗨,我来帮你搞定在Pandas 0.16.2里给两个DataFrame独有单元格加条件格式的需求!
首先,你已经通过isin()完成了各列的存在性对比,接下来只需要把这些对比结果转化为可视化的高亮格式就行。Pandas 0.16.2已经支持Styler类来做条件格式,我们可以基于你现有的比较逻辑来实现:
步骤1:生成独有单元格的标记矩阵
先把每列的isin()结果取反(因为isin()返回True代表该值在另一个DataFrame中存在,取反后就是独有的值),整合成一个和原DataFrame形状完全一致的布尔矩阵:
import pandas as pd # 假设你的df和df1已经定义好 unique_mask = pd.DataFrame({ 'A': ~df['A'].isin(df1['A']), 'B': ~df['B'].isin(df1['B']), 'C': ~df['C'].isin(df1['C']) })
步骤2:定义高亮样式函数
写一个简单的函数,根据标记矩阵的布尔值返回对应的CSS样式——这里我们用浅黄背景来高亮独有单元格:
def get_highlight_style(row): # 遍历当前行的每一列,匹配标记矩阵的结果 return [ 'background-color: #ffff99' if unique_mask.loc[row.name, col] else '' for col in row.index ]
步骤3:应用样式并输出
用Styler的apply()方法把样式函数应用到每一行,然后就可以查看或保存结果了:
# 创建样式化对象 styled_df = df.style.apply(get_highlight_style, axis=1) # 如果在Jupyter Notebook里,直接运行下面的代码就能看到高亮效果 display(styled_df) # 或者保存为HTML文件,方便在浏览器查看 styled_df.to_file('unique_cells_highlighted.html')
注意事项
- 确保
df和df1的行是对齐的(比如索引一致),否则标记矩阵的位置会出错。如果索引不对齐,可以先对两个DataFrame做reset_index(drop=True)来统一索引。 - Pandas 0.16.2的
Styler功能虽然不如新版本丰富,但上面的逻辑完全兼容,放心用就行。
内容的提问来源于stack exchange,提问作者yacub elmi
相关产品推荐
相关产品推荐

