python - 比较两个数据帧并在 Python 中查找每个数据帧中缺少的内容
问题描述
我有两个具有完全相同数据结构的数据帧。我需要比较它们以查看它们是否由于任何列值不同而导致记录有任何差异。
我正在使用下面的代码来执行此操作,它可以完美地报告这两个数据帧之间是否绑定或解绑。
df=pd.concat([df1, df2])
df = df.reset_index(drop=True)
df_gpby = df.groupby(list(df.columns))
idx = [x[0] for x in df_gpby.groups.values() if len(x) == 1]
if df.reindex(idx).empty:
print('everything is good.')
else:
print('things do not tie out')
df.reindex(idx).to_csv('diff.csv', index=False)
虽然diff.csv
告诉我所有缺失或不同之处,但它没有告诉我的是哪个记录最初属于哪个数据帧,以及给定记录的初始数据帧之间的哪些列值不同。有没有办法以某种方式在我的最终输出中获取这些信息?
示例数据框。
Name | Age| Gender
0| Naxi | 27 | Male
1| Karan| 25 | Male
2| Tanya| 27 | Female
Name | Age| Gender
0| Naxi | 27 | Male
1| Tanya| 27 | Female
2| Karan| 24 | Male
我想要的输出
Name | Age| Gender | Dataframe
Karan| 24 | Male | df2
Karan| 25 | Male | df1
解决方案
您可以向每个数据框添加 1 列,然后在删除重复项时忽略该列(在 pd.concat 之后)。
df1['Dataframe'] = 'df1'
df2['Dataframe'] = 'df2'
df=pd.concat([df1, df2])
diff_df = df.drop_duplicates(subset=['Name', 'Age', 'Gender'], keep=False)
print(diff_df)
输出 -
Name Age Gender Dataframe
2 Karan 24 Male df1
1 Karan 25 Male df2
输出中的索引将帮助您在初始数据框中找到正确的行。
推荐阅读
- python - 请求 - 无法在 JSON 正文中以 ISO 8601 格式发布日期
- java - 为什么@Sql 在 Spring 测试中不起作用?
- c# - 如何防止asp.net web表单中的跨站点请求伪造(csrf)攻击
- php - 从个人网站下载 facebook 评论
- java - Jar 在 FileOutputStream 中找不到 txt 文件
- rspec-rails - Ruby 2.5.3 到 2.6.0 导致 Policy already configured 错误
- r - 绘制面板数据框拟合与实际时间序列
- python - 我的 VGG 模型摘要是空的?然而它训练得很好
- react-native - 由于 FlatList 作为其子视图,因此未正确设置超级视图的高度
- python - Google AI Platform:内核死机