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

如何用Python(Pandas)迭代实现多Excel文件多列季度数据比对

解决方案

前置修正

先修正原有代码的小问题:q1未做索引重置,和q2-q4的格式不一致,会导致比对逻辑出错,先调整q1的定义:

q1 = df[df.quarters == 1].reset_index(drop=True)

是否需要定义函数?

需要,函数封装可以大幅降低重复代码量,后续新增比对列、调整比对规则只需要修改函数内部逻辑即可,不需要重复修改4次代码。

具体实现方案

第一步:抽离配置项

把所有可变内容(季度数据、对应测试文件路径、需要比对的列)都统一配置,后续调整不需要改动核心逻辑:

# 配置1:季度数据与对应测试文件的映射关系,后续改路径直接修改这里即可
quarter_config = [
    (q1, 'from_biontech.xlsx'),
    (q2, 'from_astrazeneca.xlsx'),
    (q3, 'from_sputnik.xlsx'),
    (q4, 'from_moderna.xlsx')
]
# 配置2:需要比对的列名,后续新增比对列直接往列表里加即可
compare_cols = ['date_column', 'efficacy', 'composition', 'testgroups']
# 存储所有季度比对结果的容器,用key(q1/q2/q3/q4)即可调用对应结果
quarter_results = {}

第二步:封装比对函数

完全兼容你原有使用.equals支持空值比对的逻辑:

def compare_quarter_data(local_df, test_file_path, compare_cols):
    # 读取对应测试方的Excel文件
    test_df = pd.read_excel(ospath(test_file_path))
    # 遍历所有要比对的列自动生成比对结果
    for col in compare_cols:
        is_col_same = local_df[col].equals(test_df[col])
        local_df[f'compare_{col}'] = 'True' if is_col_same else 'False'
    return local_df

第三步:循环执行比对

for idx, (quarter_df, test_path) in enumerate(quarter_config, start=1):
    quarter_key = f'q{idx}'
    # 用.copy()避免修改原始的q1/q2/q3/q4数据,不需要的话可以去掉
    quarter_results[quarter_key] = compare_quarter_data(quarter_df.copy(), test_path, compare_cols)

结果使用说明

处理完成后,你可以通过quarter_results['q1']、quarter_results['q2']的方式获取对应季度的比对结果,和你原来单独定义q1/q2/q3/q4变量的使用方式完全一致。

可选优化(按需使用)

如果你需要逐行比对差异,而不是判断整列是否完全一致,只需要修改函数内的比对逻辑即可:

# 逐行比对,相同行返回True,不同返回False,同样支持空值比较
is_same_series = local_df[col].eq(test_df[col])
local_df[f'compare_{col}'] = is_same_series.astype(str)

内容的提问来源于stack exchange,提问作者Acerace.py

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 18:54:08