[英]Check if row value in a dataframe exists in another dataframe using loop for reconciliation
我希望开发一些通用逻辑,使我能够在 2 个数据集之间执行协调。
我有 2 个数据框,我想遍历 df1 中的每一行值并检查它是否存在于 df2 中。 如果它确实存在,我想在 df1 中创建一个新列“匹配”,值为“是”,如果它不存在,我想 append 在单独的 df 中缺失值,我将打印到 csv。
示例数据集:
df1:
ID Name Age
1 Adam 45
2 Bill 44
3 Claire 23
df2:
ID Name Age
1 Adam 45
2 Bill 44
3 Claire 23
4 Bob 40
5 Chris 21
我在这里使用的 2 个数据框中的列名仅供参考。 但基本上我想检查 df1 中的行 (1, Adam, 45) 是否存在于 df2 中。
df3 的 output 如下所示: df3:
ID Name Age
4 Bob 40
5 Chris 21
更新后的 df1 如下所示: df2:
ID Name Age Match
1 Adam 45 Yes
2 Bill 44 Yes
3 Claire 23 Yes
需要明确的是,我知道这可以使用合并或 isin 来完成,但希望有一个可用于任何数据集的流体解决方案。
我很感激这可能是一个很大的问题,因为我没有提供太多指导,但任何帮助都会很棒!
谢谢!!
您需要在此处使用merge
并利用indicator=True
功能:
df_all = df1.merge(df2, on=['ID'], how='outer', indicator=True)
df3 = df_all[df_all['_merge'] == 'right_only'].drop(columns=['Name_x', 'Age_x']).rename(columns={'Name_y': 'Name', 'Age_y': 'Age'})[['ID', 'Name', 'Age']]
df2 = df_all[df_all['_merge'] == 'both'].drop(columns=['Name_x', 'Age_x']).rename(columns={'Name_y': 'Name', 'Age_y': 'Age'})[['ID', 'Name', 'Age']]
print(df3)
print(df2)
df3:
ID Name Age
3 4 Bob 40
4 5 Chris 21
df2:
ID Name Age
0 1 Adam 45
1 2 Bill 44
2 3 Claire 23
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.