基于其他列中相同的 values/matches 从两个数据框中按元素减去(或添加)列

Elementwise Subtraction(or addition) of columns from two dataframes based on the same values/matches in other columns

我有两个数据框。

df1 = pd.DataFrame({'Ver' : [2,2,2], 
                   'SN' : [1,1,1], 
                   'Split' : [AA,AA,AA] 
                   'Quad' : [3,3,4] 
                   'Channel' : [1,2,0]
                   'Mean' : [1,2,3] 
                   'Other' : [10,10,10]
                   'Mean2' : [1,2,3] 
                   'Other2' : [10,10,10]  
})

df1 = pd.DataFrame({'Ver' : [2,2,2], 
                   'SN' : [1,1,1], 
                   'Split' : [AA,AA,AA] 
                   'Quad' : [3,3,4] 
                   'Channel' : [3,2,0]
                   'Mean' : [4,5,6] 
                   'Other' : [10,10,10]  
                   'Mean2' : [4,5,6] 
                    'Other2' : [10,10,10]  
})

我想从 df2 中的平均列中减去 df1 中的平均列,并且仅对值在列 'SN'、'Quad'、'Channel' 中匹配的元素执行此操作.如果这些值不匹配,我想 "throw out" 数据。我想对 mean2 列做同样的事情。我想将生成的数据框分配给一个新的数据框。在 pandas 中有 easy/straightforward 方法吗?

我最终应该是:

resultant_df= pd.DataFrame({'Ver' : [2,2], 
                   'SN' : [1,1], 
                   'Split' : [AA,AA] 
                   'Quad' : [3,4] 
                   'Channel' : [2,0]
                   'Mean' : [-3,-3] 
                   'Other' : [,10,10]  
                   'Mean2' : [-3,-3] 
                    'Other2' : [10,10]  
})              
In [70]: df1 = pd.DataFrame({ 'SN':[1,1,1], 'Quad':[3,3,4], 
    ...:                      'Channel':[1,2,0], 'Mean':[1,2,3] })

In [71]: df2 = pd.DataFrame({ 'SN':[1,1,1], 'Quad':[3,3,4], 
    ...:                      'Channel':[3,2,0], 'Mean':[4,5,6] })

In [72]: results = df1.merge( df2, on=['Channel','Quad','SN'] )

In [73]: results['Mean'] = results.Mean_x - results.Mean_y

In [74]: results[ list(df1.columns) ]
Out[74]: 
   Channel  Mean  Quad  SN
0        2    -3     3   1
1        0    -3     4   1