python - 如何比较具有相同列但行数不同的两个数据框?
问题描述
df1=
A B C D
a1 b1 c1 1
a2 b2 c2 2
a3 b3 c3 4
df2=
A B C D
a1 b1 c1 2
a2 b2 c2 1
我想比较两个数据框中“D”列的值。如果两个数据框的行数相同,我就会这样做。
newDF = df1['D']-df2['D']
但是,有时行数不同。我想要一个结果数据框,它显示这样的数据框。
结果DF=
A B C D_df1 D_df2 Diff
a1 b1 c1 1 2 -1
a2 b2 c2 2 1 1
编辑:如果 df1 和 df2 中的 A、B、C 中的第一行相同,那么只有比较每个数据帧的 D 列的第一行。同样,对所有行重复。
解决方案
使用merge
和df.eval
df1.merge(df2, on=['A','B','C'], suffixes=['_df1','_df2']).eval('Diff=D_df1 - D_df2')
Out[314]:
A B C D_df1 D_df2 Diff
0 a1 b1 c1 1 2 -1
1 a2 b2 c2 2 1 1
推荐阅读
- javascript - 如何使用 jquery 从超链接 onclick 中获取 id?
- c# - 在特定日期后停止 Xamarin 表单中的倒数计时器
- javascript - can you manage how to add a day in a date in php?
- php - 循环遍历数组并添加相同的键值
- windows-server-2008-r2 - Server 2008 R2 Secondary Domain Controller - Accidentally Disabled Network Adapter
- django - 如何使用 Docker 将图形工具附加到 Django
- java - 无法在 Spring Boot 中发出 POST 请求
- ios - drawing line using vertex shader & fragment shader in spritkit in swift
- php - php+laravel 在哪里读取 db 连接字符串,因为运行时默认为用户 ID 未在我的应用程序的任何地方定义?
- vxworks - 如何在 Vxworks 的内核 shell 中使用 ping 命令?