You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多列配对比较并统计不匹配总数的Pandas实现问题

解决Pandas多组配对列的不匹配数量统计问题

问题说明

你需要处理包含多组配对列(如A_1与A_2、B_1与B_2)的Pandas数据集,按ID统计每行中各组配对列的不匹配数量,且不想手动逐一比较15组列。示例数据如下:

import pandas as pd

df = pd.DataFrame({
    'ID': ['a','b','c'],
    'A_1': [3,4,5],
    'B_1': [1,5,7],
    'A_2': [3,3,5],
    'B_2': [3,3,7]
})

期望得到的结果:

df1 = pd.DataFrame({
    'ID': ['a','b','c'],
    'A_1': [3,4,5],
    'B_1': [1,5,7],
    'A_2': [3,3,5],
    'B_2': [3,3,7],
    'Count': [1,2,0]
})

原代码问题分析

你之前的代码无法运行的核心问题:

  • alist=[A_1,A_2,B_1,B_2]中的元素不是列名字符串,应该写成['A_1','A_2','B_1','B_2']
  • 使用df.apply逐行循环处理效率极低,尤其面对15组列的数据集,且通过索引df[i]取元素容易因列顺序变动出错

高效解决方案

利用Pandas的向量化操作,自动匹配所有配对列并统计不匹配数,步骤如下:

  1. 筛选并排序配对列:分别提取所有以_1和_2结尾的列,排序确保两组列一一对应
  2. 批量比较不匹配项:对两组列的数据取整后比较,生成布尔值矩阵(True表示不匹配)
  3. 统计每行不匹配数:对布尔矩阵的每行求和,得到每行的不匹配总数

完整代码

import pandas as pd

# 创建示例数据
df = pd.DataFrame({
    'ID': ['a','b','c'],
    'A_1': [3,4,5],
    'B_1': [1,5,7],
    'A_2': [3,3,5],
    'B_2': [3,3,7]
})

# 筛选并排序配对列
cols_1 = sorted(df.filter(like='_1').columns)
cols_2 = sorted(df.filter(like='_2').columns)

# 批量比较不匹配项(保留1位小数)
mismatch_matrix = df[cols_1].round(1) != df[cols_2].round(1)

# 统计每行不匹配数量
df['Count'] = mismatch_matrix.sum(axis=1)

print(df)

运行后输出结果:

ID  A_1  B_1  A_2  B_2  Count
0  a    3    1    3    3      1
1  b    4    5    3    3      2
2  c    5    7    5    7      0

优势说明

  • 无需手动列配对:自动识别所有_1/_2配对列,适配15组甚至更多列的场景
  • 效率极高:向量化操作比逐行循环快数倍,适合处理大规模数据集
  • 鲁棒性强:排序列名确保配对关系不会因列顺序变动出错

内容的提问来源于stack exchange,提问作者Derek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 04:06:24