python - 查找列之间不匹配的条目并遍历列

标签 python pandas numpy

我有两个数据集需要验证。所有记录应匹配。我在确定如何遍历每个不同的列时遇到了麻烦。

import pandas as pd 
import numpy as np

df = pd.DataFrame([['charlie', 'charlie', 'beta', 'cappa'], ['charlie', 'charlie', 'beta', 'delta'], ['charlie', 'charlie', 'beta', 'beta']], columns=['A_1', 'A_2','B_1','B_2'])

df.head()

Out[83]: 
       A_1      A_2   B_1    B_2
0  charlie  charlie  beta  cappa
1  charlie  charlie  beta  delta
2  charlie  charlie  beta   beta

例如,在上面的代码中,我想将A_1与A_2和B_1与B_2进行比较,以分别返回一个新列A_check和B_check,如果A_1与A_2匹配为A_Check,则返回True。

像这样的东西:
df['B_check'] = np.where((df['B_1'] == df['B_2']), 'True', 'False')
df_subset = df[df['B_check']=='False'] 

但是可在任何给定的列名上进行迭代,其中需要检查的列始终在下划线之前具有相同的名称,而在下划线之后始终具有1或2。

最终,实际任务具有多个数据框,其中要检查的列数以及要检查的列数都不同。我最终要获得的输出是一个数据帧,该数据帧显示了对任何特定列检查都为假的所有记录。

最佳答案

使用更全面的正则表达式:

from itertools import groupby
import re

for k, cols in groupby(sorted(df.columns), lambda x: x[:-2] if re.match(".+_(1|2)$", x) else None):
    cols=list(cols)
    if(len(cols)==2 and k):
        df[f"{k}_check"]=df[cols[0]].eq(df[cols[1]])

它将仅将名称以_1_2结尾的列配对在一起,而不管它们之前的名称是什么,仅当存在2- _check_1时(假设您没有2个同名列),才计算_2

对于样本数据:

       A_1      A_2   B_1    B_2  A_check  B_check
0  charlie  charlie  beta  cappa     True    False
1  charlie  charlie  beta  delta     True    False
2  charlie  charlie  beta   beta     True     True

关于python - 查找列之间不匹配的条目并遍历列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60458581/

相关文章:

python - 根据另一个 df 的几个条件设置 df 的列值

python - 有条件地填充数据框列的所有后续值

python - 如何在将行与列拆分后重新索引数据框?

python - 线程: function seems to run as a blocking loop although i am using threading

Python pandas 自动对列进行排序

python - 使用numpy过滤掉多个注释符号

python - 我在定义函数时做错了什么,导致错误 "numpy.ndarray"不可调用?

python - 多个 Numpy 随机洗牌不会相加

Python:如何告诉 for 循环从函数继续?

python - Tensorflow U-Net 多类标签