首页 > 解决方案 > 如何比较两列数据以确保没有数据匹配

问题描述

我正在执行比较以确保 df1 中的帐号不会渗入 df2 中的其他帐号

我的目的是识别并输出每个 df 中包含任何“不需要的”匹配帐号的行坐标和值

df1 & df2 有一个包含帐号的单列,如下所示:

df1
Account Number
1234
5678
9101
1121

df2
Account Number
3141
5161
7181
9202
1222
1234

df2 中的行数与 df1 不同,两个数据帧中都有一个匹配值 1234。考虑到每行计数从零开始,我想要的输出如下:

df1 Row 0 = df2 Row 5 as 1234

我是 pandas 的新手,所以请原谅我的术语和实现此目的的方法。如果有更好更棒的方法来做到这一点,我很乐意听到并实施它。

我做了研究,我认为可能有一种方法可以使用合并或 isin 方法?

任何想法将不胜感激 =)

标签: pythonpandascompare

解决方案


您可以合并列,然后使用输出在原始数据集中查找问题行

target_col = 'Account Number'
matching_account_nos = pd.merge(df1[[target_col]], df2[[target_col]], on='Account Number'), how='inner').values

# now use this to look up the rows in the original dataframes
problem_rows_df1 = df1[df1[target_col].isin(matching_account_nos)]
problem_rows_df2 = df2[df2[target_col].isin(matching_account_nos)]

合并将返回一个数据框,其中包含“帐号”相等的行。将把它.values变成一个 numpy 数组,你可以用它来查找你需要的原始数据框中的哪些行?


推荐阅读