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

使用Python对比行数不同、索引无关的两个Excel文件并展示差异的问题

实现方法

首先需要先确定可以唯一标识一名学生的字段组合,你提供的样例中Name+Age+Birth_Country三个字段组合可以唯一匹配到同一个学生,我们就以该组合作为关联键实现无顺序、适配不同行数的对比,完整代码如下:

import pandas as pd
import numpy as np

# 读入两个Excel文件
df1 = pd.read_excel('School A - Information.xlsx')
df2 = pd.read_excel('School B - Information.xlsx')

# 配置项:唯一标识学生的字段列表
unique_keys = ['Name', 'Age', 'Birth_Country']
# 自动获取需要对比的属性字段列表
compare_cols = [col for col in df1.columns if col not in unique_keys]

# 外连接合并两个表,通过唯一键匹配,自动区分两所学校的属性字段
merge_df = pd.merge(
    df1, df2,
    on=unique_keys,
    how='outer',
    suffixes=('_A', '_B')
)

# 初始化结果表,先存唯一标识字段
result_df = merge_df[unique_keys].copy()

# 逐字段对比标注差异
for col in compare_cols:
    a_col = f"{col}_A"
    b_col = f"{col}_B"
    result_df[col] = np.select(
        condlist=[
            merge_df[a_col].isna(), # 仅学校B有该学生
            merge_df[b_col].isna(), # 仅学校A有该学生
            merge_df[a_col] == merge_df[b_col] # 两边属性一致
        ],
        choicelist=[
            "仅School B存在",
            "仅School A存在",
            merge_df[a_col]
        ],
        # 两边属性不一致,标注修改前后值
        default=merge_df[a_col].astype(str) + " --> " + merge_df[b_col].astype(str)
    )

样例输出结果

对应你提供的测试数据,最终result_df的输出如下:

NameAgeBirth_CountryPrevious Schools
tom10USA3
nick15MEX1 --> 4
juli14CAN仅School A存在
tom19NOR1

如果你的实际数据中有更准确的唯一标识字段(比如学号),只需要修改unique_keys配置项即可,逻辑通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:15:04