循环列以在数据框中一次比较两列,并根据每个比较结果添加一个摘要列

Loop over columns to compare two columns at a time in a dataframe and add one summary column based on each comparison result

df1.csv

df2.csv

执行下面的代码后,

df1.merge(df2, on=['Customer_id'], indicator='Status', how='outer')

我明白了,

df3.csv

现在我想比较Name_x中的所有元素是否等于Name_y,其他列也类似。我正在做的是单独比较它。这是我的代码:

df3.assign(Status1=df3.Name_x == df3.Name_y)

df3.assign(Status2=df3.Age_x == df3.Age_y)

等等

完成上述操作后,

df4.csv

我可以写 for 循环 这样我就不必写代码

df3.assign()

分别比较每两列?

最重要的是我的最终状态列应该如下所示,

output

我正在做的是想这样写 if elif:

def f(row):

if row['Status1'] == 'True' and row['Status2'] == 'False':
    val = 'Matching for column {Name}'
elif row['Status1'] == 'False' and row['Status1'] == 'True':
    val = 'Matching for column {Age}
elif row['Status1'] == 'False' and row['Status1'] == 'False':
    val = 'Not Matching at all' #and so on...
return val

如果只在两列 Status1 和 Status2 上写 if elif 是可以的,如果想写的话会变得冗长if elif 超过 2 列。如果我还有 Status3 列,我可以在几行代码中获得所需的输出吗?

使用pandas.merge

将两个 csv 读入 pandas

df1=pd.Dataframe.from_csv('file')
df2=pd.Dataframe.from_csv('file2')

然后使用 "outer" 合并合并

df3=pd.merge(df1,df2,on=[key1,key2 etc], how="outer", indicator=True) 

此时你应该已经完成​​了 90%