基于其他列中相同的 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
我有两个数据框。
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