如何使用Python(pandas)批量对比Df1的column1与多表同名列
批量多DataFrame同名列对比实现方案
已知前提
- Df1为SQL语句
select * from emp_table的查询结果,作为对比基准,对应Table1 - Df2、Df3…Df100及后续新增Df,分别对应
company_table等不同业务表的SQL查询结果 - 已掌握单组列对比的基础写法:
# 原有单组对比代码 s1 = Df1.column1 s2 = Df2.column1 s1.compare(s2, keep_shape=True, keep_equal=True)
- 需求:以Df1的
column1列为基准,逐行和其余所有表的column1列做值比对,值匹配标记为pass,不匹配标记为fail,方案需支持后续动态新增待对比表,无需反复修改核心逻辑。
实现步骤
1. 统一管理待对比DataFrame
不要用零散的独立变量存Df2、Df3…Df100,把所有非基准表存在字典里,后续新增表只需往字典加键值对即可,不用动核心对比代码:
import pandas as pd # 固定基准表和基准对比列 base_df = Df1 base_compare_col = base_df["column1"] # 待对比表字典:key为表标识(自定义即可),value为对应DataFrame # 后续新增表直接在字典里追加键值对就行 compare_tables = { "Table2": Df2, "Table3": Df3, "Table4": Df4, # 此处省略Df5到Df100的配置,按相同格式补全即可 }
注意:对比前必须确认所有待对比DataFrame的行数、行顺序和Df1完全一致,否则逐行对比会出现索引错位。如果各表行顺序不统一,要先拿业务主键做关联合并,对齐行之后再对比,避免结果错误。
2. 封装单组对比逻辑
把单组列的对比逻辑封装成可复用函数,直接输出要求的pass/fail标记:
def single_col_compare(base_series: pd.Series, target_df: pd.DataFrame, col_name: str = "column1") -> pd.Series: """ 输入基准列序列、目标DataFrame、待对比列名,逐行返回pass/fail对比结果 """ target_series = target_df[col_name] # 逐行判断值是否相等 res = [] for base_val, target_val in zip(base_series, target_series): if base_val == target_val: res.append("pass") else: res.append("fail") return pd.Series(res, index=base_series.index)
如果需要查看具体差异值,可以在函数里额外调用你之前使用的compare方法存差异详情,上面的写法直接输出你需要的pass/fail标记,更贴合当前需求。
3. 批量执行对比,汇总结果
遍历待对比表字典,循环调用对比函数,把所有结果合并成一张总表方便查看:
# 初始化结果表,先放入基准列的值,方便逐行核对 final_result = pd.DataFrame({ "基准表_column1值": base_compare_col }) # 循环批量完成所有表的对比 for table_name, df in compare_tables.items(): final_result[f"{table_name}_对比结果"] = single_col_compare(base_compare_col, df) # 打印或导出结果 print(final_result)
最终输出的结果表中,每一行对应基准表Df1的一条数据,每一列对应一个待对比表的比对结果,直接查看pass/fail标记即可知道值是否匹配。
后续新增表的适配方法
后续如果新增Df101、Df102等新的待对比表,不需要修改任何对比逻辑,只需要在最开始定义的compare_tables字典里新增一行对应的键值对,重新运行代码就会自动把新表加入对比流程。
内容的提问来源于stack exchange,提问作者user14704837
相关产品推荐
相关产品推荐

