使用Pandas对比新DataFrame与ground truth DataFrame查找数据偏差的方法
最简实现方案
核心思路是先把基准真值预处理为查询字典,后续校验新DataFrame时直接按列位置取值对比,完全不依赖新表的列名。
步骤1:预处理基准真值(仅需执行一次,可用于所有新表校验)
将基准表的项目ID设为键,负责人设为值,生成哈希查询表,单次查询复杂度为O(1):
import pandas as pd # 按列位置取基准表的ID列和负责人列,生成查询字典 gt_map = df_gt.set_index(df_gt.columns[0])[df_gt.columns[1]].to_dict()
步骤2:通用校验函数
直接按位置取新表的两列,向量化过滤错误条目,适配任意列名的双列新DataFrame:
def get_validation_errors(df_new, gt_map): # 按位置取ID列、负责人列,无视列名 pid_col, leader_col = df_new.columns[0], df_new.columns[1] # 错误条件:ID不在基准中 / 负责人与基准不匹配 error_filter = ~df_new[pid_col].isin(gt_map) | (df_new[leader_col] != df_new[pid_col].map(gt_map)) # 转换为嵌套列表输出 return df_new.loc[error_filter, [pid_col, leader_col]].values.tolist()
示例测试
errors = get_validation_errors(df_new, gt_map) print(errors) # 输出结果与预期一致:[[122, 'Henry Cavil'], [144, 'Natalie Portman'], [146, 'Jack Black']]
方案优势
- 完全适配任意列名的新表,仅要求新表两列顺序固定(第一列为项目ID,第二列为负责人,符合题目要求)
- 基准仅需预处理一次,可批量校验多个新DataFrame
- 全向量化操作,处理百万行级数据也无性能问题
内容的提问来源于stack exchange,提问作者iby.helmy
相关产品推荐
相关产品推荐

