You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于同Key列的两个Pandas DataFrame匹配值设置条件格式?

解决Pandas DataFrame匹配单元格高亮问题

问题说明

现有两个Pandas DataFrame:df_diff和df_all,二者共享Key列,其余列名不同。需要遍历df_diff的每一行,通过Key在df_all中找到对应行,检查df_diff该行的每个单元格值是否存在于df_all对应行的任意单元格中,匹配的单元格设置红色背景。

示例数据

import pandas as pd

# 构造示例df_diff
df_diff = pd.DataFrame({
    'Key': ['Key2', 'Key3', 'Key4'],
    'Column_1': ['Value2', 'Value3', 'Value5'],
    'Column 2': ['Value3', 'Value4', 'Value6']
})

# 构造示例df_all
df_all = pd.DataFrame({
    'Key': ['Key2', 'Key3', 'Key6'],
    'Column_all_A': ['Value8', 'Value3', 'Value0'],
    'Column_all_B': ['Value2', 'Value10', 'Value11']
})

解决方案代码

# 将df_diff转换为Key对应值列表的字典,方便快速查询
diff_key_values = df_diff.set_index('Key').apply(lambda row: row.tolist(), axis=1).to_dict()

# 定义高亮函数:匹配则设置红色背景
def highlight_match(cell_value, row_key):
    if row_key in diff_key_values and cell_value in diff_key_values[row_key]:
        return 'background-color: red'
    return ''

# 对df_all应用样式,按行遍历每个单元格
styled_result = df_all.style.apply(
    lambda row: [highlight_match(val, row['Key']) for val in row],
    axis=1
)

# 查看结果(Jupyter环境直接运行即可显示,或导出为HTML)
styled_result

代码逻辑说明

  1. 预处理匹配数据:把df_diff转换成以Key为键、对应行所有非Key列值的列表为值的字典,避免每次遍历都重复查询,提升效率。
  2. 定义高亮规则:highlight_match函数接收单元格值和该行的Key,判断值是否在对应Key的匹配列表中,符合条件则返回红色背景样式。
  3. 应用样式到df_all:通过style.apply按行处理df_all,每行的每个单元格都调用高亮函数生成对应的样式。

运行后,df_all中Key2的Column_all_B、Key3的Column_all_A会被标记红色背景,符合预期需求。

内容的提问来源于stack exchange,提问作者NeuroNaut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:09:56