如何校验取值体系不同的两个DataFrame列的匹配度并统计不匹配项数
解决方案
实现逻辑:先基于给定的映射规则构造字典,将其中一列转换为和另一列相同的格式后逐行对比,统计不匹配的总数即可。
完整代码示例
import pandas as pd # 1. 定义映射规则,可根据需求选择数字转年龄段或者年龄段转数字的映射 # 此处以数字转年龄段为例 num_to_age = { '0': '00-04', '1': '05-09', '2': '10-14', '3': '15-19', '4': '20-24', '5': '25-29', '6': '30-34' } # 你的原始数据,可替换为实际读取的数据 A = pd.DataFrame(['30-34', '20-24', '20-24', '15-19', '00-04']) B = pd.DataFrame(['6','4', '4', '3', '0']) # 2. 先校验两个列长度是否一致 if len(A) != len(B): mismatch_count = abs(len(A) - len(B)) print(f"两个列长度不一致,默认统计长度差值为不匹配数:{mismatch_count}") else: # 3. 将B列的数字映射为对应的年龄段 B_mapped = B.iloc[:, 0].map(num_to_age) # 4. 统计不匹配的总条数,非法取值(不在映射规则内的取值)也会被统计为不匹配 mismatch_count = (A.iloc[:, 0] != B_mapped).sum() print(f"不匹配的元素总数为:{mismatch_count}")
输出结果
运行上述示例代码,输出结果为0,和预期一致。
补充说明
如果你的DataFrame有明确的列名,将代码中的iloc[:, 0]替换为对应列名即可,例如A的列名为age_range、B的列名为age_code,则对应写法为A['age_range']、B['age_code']。
内容的提问来源于stack exchange,提问作者lonyen11
相关产品推荐
相关产品推荐

