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

如何逐单元格遍历两个同结构DataFrame并执行比较逻辑

逐单元格比较DataFrame并执行对应函数的实现方法

假设你有两个结构完全一致的DataFrame df1 和 df2,下面是几种高效实现需求的方法:

方法一:使用numpy向量化函数(推荐)

先定义处理单个单元格比较结果的函数,再用np.vectorize将其转为可批量处理的向量化函数:

import numpy as np
import pandas as pd

# 自定义单元格处理逻辑
def process_cell(val1, val2):
    if val1 == val2:
        # 相等时的操作示例
        return f"EQUAL:{val1}"
    else:
        # 不等时的操作示例
        return f"DIFF:{val1}→{val2}"

# 转为向量化函数,实现批量处理
vectorized_process = np.vectorize(process_cell)

# 应用到两个DataFrame,生成结果
result_df = pd.DataFrame(vectorized_process(df1, df2), columns=df1.columns, index=df1.index)

方法二:利用布尔掩码分别处理

先生成标记单元格是否相等的布尔掩码,再针对不同区域执行操作:

# 生成相等/不等的布尔掩码
mask_equal = df1 == df2
mask_diff = ~mask_equal

# 初始化结果DataFrame,填充相等单元格的处理结果
result_df = df1[mask_equal].applymap(lambda x: f"EQUAL:{x}")
# 填充不等单元格的处理结果
result_df[mask_diff] = df1[mask_diff].astype(str) + "→" + df2[mask_diff].astype(str)
result_df[mask_diff] = result_df[mask_diff].applymap(lambda x: f"DIFF:{x}")

方法三:逐单元格遍历(仅小数据量可用)

如果数据量极小,也可以直接遍历每个单元格,但这种方法效率极低,不推荐大数据场景使用:

result_df = df1.copy()
for idx in df1.index:
    for col in df1.columns:
        val1 = df1.at[idx, col]
        val2 = df2.at[idx, col]
        if val1 == val2:
            result_df.at[idx, col] = f"EQUAL:{val1}"
        else:
            result_df.at[idx, col] = f"DIFF:{val1}→{val2}"

说明:DataFrame.compare仅用于识别并展示两个DataFrame的差异,无法直接支持自定义函数执行,因此需要通过上述方法实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:45:26