如何对比不同形状的DataFrame并生成列级并排对比结果
实现两个不同形状DataFrame的列级并排对比
针对不同形状的DataFrame,要实现列级的并排对比,可以通过行对齐+逐列对比+列拼接的方式完成,具体步骤如下:
1. 准备数据与导入依赖
import pandas as pd # 定义原始DataFrame df1 = pd.DataFrame({ 'fname': ['Chris', 'John', 'Jane', 'will'], 'lname': ['Potter', 'Doe', 'vw', 'Tesla'], 'age': [23, 32, 25, 45] }) df2 = pd.DataFrame({ 'fname': ['George', 'John', 'Jane'], 'lname': ['Potter', 'Hall', 'vw'], 'age': [23, 32, 27] })
2. 对齐两个DataFrame的行
由于两个DataFrame行数不同,先获取所有索引的并集,用reindex统一行结构,缺失值用NaN填充:
all_index = df1.index.union(df2.index) df1_aligned = df1.reindex(all_index) df2_aligned = df2.reindex(all_index)
3. 逐列对比并构造列级并排结果
遍历每一列,对比两个DataFrame对应位置的值,生成PASS/FAIL结果,再将df1列、对比结果、df2列按顺序拼接:
result_df = pd.DataFrame() for col in df1.columns: # 对比列值是否相等(自动处理NaN的情况,NaN与任何值对比都返回False) compare_res = df1_aligned[col].eq(df2_aligned[col]).map({True: 'PASS', False: 'FAIL'}) # 拼接当前列的对比组 result_df = pd.concat([ result_df, df1_aligned[[col]].rename(columns={col: f"{col}_df1"}), pd.DataFrame(compare_res, columns=[f"{col}_RESULT"]), df2_aligned[[col]].rename(columns={col: f"{col}_df2"}) ], axis=1)
4. 查看最终结果
print(result_df)
输出结果:
fname_df1 fname_RESULT fname_df2 lname_df1 lname_RESULT lname_df2 age_df1 age_RESULT age_df2 0 Chris FAIL George Potter PASS Potter 23.0 PASS 23.0 1 John PASS John Doe FAIL Hall 32.0 PASS 32.0 2 Jane PASS Jane vw PASS vw 25.0 FAIL 27.0 3 will FAIL NaN Tesla FAIL NaN 45.0 FAIL NaN
自定义对比逻辑(可选)
如果需要更灵活的对比规则(比如数值型字段允许误差范围),可以修改对比逻辑,以age列为例:
# 示例:年龄差值≤2时判定为PASS compare_res = abs(df1_aligned['age'] - df2_aligned['age']).fillna(999) <= 2 compare_res = compare_res.map({True: 'PASS', False: 'FAIL'})
内容的提问来源于stack exchange,提问作者NK1
相关产品推荐
相关产品推荐

