Python 计算具有相同列和一些不匹配行的两个数据帧之间的差异

Python 计算具有相同列和一些不匹配行的两个数据帧之间的差异,python,pandas,Python,Pandas,df1 df2 假设我有两个如上所示的熊猫数据帧,问题:我如何计算这两个数据帧之间的差异,以得到如下所示的最终数据帧 预期产出 结果DF 我已经尝试过的内容:我通过将两个数据帧合并在一起,然后计算两列之间的差异来获得结果。提出这个问题是为了看看是否还有其他有效的方法。我似乎找不到groupby减法,所以我将你的第二个df乘以-1,所以和可以得到想要的结果 fileName obj1 obj2 obj3 obj4 file_01.jpg 0 1 -1

df1

df2

假设我有两个如上所示的熊猫数据帧,问题:我如何计算这两个数据帧之间的差异,以得到如下所示的最终数据帧

预期产出
结果DF


我已经尝试过的内容:我通过将两个数据帧合并在一起,然后计算两列之间的差异来获得结果。提出这个问题是为了看看是否还有其他有效的方法。

我似乎找不到groupby减法,所以我将你的第二个df乘以-1,所以
可以得到想要的结果

fileName     obj1   obj2   obj3   obj4
file_01.jpg  0      1      -1      0
file_02.jpg  0      0      0      0
file_03.jpg  1      2      0      1      
file_04.jpg  0      -3     -1     -2

我想你很接近。我只想:

  • 外接
  • groupby文件名和
  • 重置索引
比如:


谢谢杰夫!我只是在寻找其他方法来达到效果,这是很有帮助的!
fileName     obj1   obj2   obj3   obj4
file_01.jpg  1             2
file_02.jpg         1      1
file_04.jpg         3      1      2
fileName     obj1   obj2   obj3   obj4
file_01.jpg  0      1      -1      0
file_02.jpg  0      0      0      0
file_03.jpg  1      2      0      1      
file_04.jpg  0      -3     -1     -2
obj_cols = ['obj1', 'obj2', 'obj3', 'obj4']
df2[obj_cols] *= -1

pd.concat([df1, df2]).groupby(['fileName'], as_index=False).sum()

      fileName  obj1  obj2  obj3  obj4
0  file_01.jpg     0     1    -1     0
1  file_02.jpg     0     0     0     0
2  file_03.jpg     1     2     0     1
3  file_04.jpg     0    -3    -1    -2
In [25]: df1                                                                    
Out[25]: 
   a  value
0  2     33
1  3     10
2  5      2

In [26]: df2                                                                    
Out[26]: 
   a  value
0  1     -1
1  3      2
2  5    -50

In [27]: df3 = df1.merge(df2, how='outer')                                      

In [28]: df3                                                                    
Out[28]: 
   a  value
0  2     33
1  3     10
2  5      2
3  1     -1
4  3      2
5  5    -50

In [29]: df3.groupby('a').sum().reset_index()                                   
Out[29]: 
   a  value
0  1     -1
1  2     33
2  3     12
3  5    -48