不同形状Pandas DataFrame的多值比对与异常标记实现方案
Pandas 实现数据校验方案
核心实现逻辑
我们可以先将基准真值表转换为查询映射,再逐行校验待校验数据集的取值是否符合基准要求,具体实现代码如下:
完整代码示例
import pandas as pd # 样例数据构造 data_df = pd.DataFrame( {"Reference": ("A", "A", "A", "B", "C", "C", "D", "E"), "Other col": ("U", "U", "U--","V", "W", "W--", "X", "Y")}, index=[1, 2, 3, 4, 5, 6, 7, 8] ) truth_df = pd.DataFrame( {"Reference": ("A", "B", "C", "D", "E"), "Other col": ("U", "V", "W", "X", "Y")}, index=[1, 4, 5, 7, 8] ) # 步骤1:构建Reference到基准值的映射字典 truth_map = truth_df.set_index("Reference")["Other col"] # 步骤2:逐行校验取值,新增Issues标记列 data_df["Issues"] = data_df.apply( lambda row: "Wrong" if row["Other col"] != truth_map[row["Reference"]] else "", axis=1 ) # 可选:如果需要和示例result_df完全一致,过滤掉Reference为E的行(E取值完全匹配示例未展示) result_df = data_df[data_df["Reference"] != "E"].copy()
逻辑说明
- 先将
truth_df转换为以Reference为索引的Series,作为基准查询映射,查询效率远高于逐行匹配 - 遍历
data_df每一行,将当前行的取值和对应Reference的基准值对比,不匹配则标记为Wrong,匹配则留空 - 若你实际场景中的值列名不是
Other col,替换为实际列名即可。
内容的提问来源于stack exchange,提问作者Ricardo Sanchez
相关产品推荐
相关产品推荐

