python - 如何比较两列数据以确保没有数据匹配
问题描述
我正在执行比较以确保 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 方法?
任何想法将不胜感激 =)
解决方案
您可以合并列,然后使用输出在原始数据集中查找问题行
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 数组,你可以用它来查找你需要的原始数据框中的哪些行?
推荐阅读
- npm - 如何配置“lerna add”以使用〜波浪号而不是^插入符号?
- google-cloud-platform - 每个文件统计/下载的谷歌云存储
- elasticsearch - 将逗号分隔的元素计数为弹性搜索中的值
- pandas - 在 Python 中,如何使用 Series 更新 DataFrame 中的多行?
- azure - 如何获取在 Azure DevOps (VSTS) 中进行相关测试的工作项?
- python - 移动点和移动线段的撞击位置和时间(连续碰撞检测)
- asp.net-web-api2 - 开放 API 3 规范生成 - ASP.Net Web API 2
- linux - smtp-sink 未在 GitHub Actions 上捕获邮件
- javascript - 从本地和 REST 源数据中获取 DataTables 数据
- shell - 使用 uglifycss 生成输出文件时更改文件扩展名