如何在Python中编写通用函数批量对比Pandas合并后的多组关联列
批量对比合并后DataFrame的对应列
高效实现方案
你之前的循环逻辑既不符合_X/_Y对应列的对比需求,又没利用pandas的向量化运算优势,导致处理10万+行数据时效率极低。以下是适配你需求的高效批量处理方法:
- 提取对应列对
先从合并后的Compare表中筛选出所有_X后缀的列,再匹配对应的_Y列:
# 获取所有_X结尾的列(自动排除unique_key) x_cols = [col for col in Compare.columns if col.endswith('_X')]
- 批量生成对比列
利用pandas向量化运算,一次性生成所有对比列(避免低效的逐行/双重循环):
# 字典推导式批量生成对比结果列 compare_results = { f"compare_{col[:-2]}": Compare[col] == Compare[f"{col[:-2]}_Y"] for col in x_cols } # 将对比结果合并到原DataFrame Compare = pd.concat([Compare, pd.DataFrame(compare_results)], axis=1)
注意事项
- 如果对比的是浮点数类型的列,直接用
==可能因精度问题出现误判,建议改用numpy.isclose:import numpy as np compare_results = { f"compare_{col[:-2]}": np.isclose(Compare[col], Compare[f"{col[:-2]}_Y"], atol=1e-6) for col in x_cols } - 上述代码仅循环280次左右(列的数量),每次操作都是整列的向量化计算,完全适配10万+行的数据规模,效率比双重循环提升数个数量级。
内容的提问来源于stack exchange,提问作者Amit Pandey
相关产品推荐
相关产品推荐

