Python 根据条件计算两个不同数据帧中两列的差异

Python 根据条件计算两个不同数据帧中两列的差异,python,pandas,Python,Pandas,我有两个带有公共列的数据帧。我想根据第三列的条件创建一个新列,其中包含两列(每个数据帧一列)之间的差异 df_a: Time Volume ID 1 5 1 2 6 2 3 7 3 输出将向dfu a追加一个新列,其中两个id相等的卷列(df_a.volume-df_b.volume)之间具有差异 df_a: Time Volume ID Diff

我有两个带有公共列的数据帧。我想根据第三列的条件创建一个新列,其中包含两列(每个数据帧一列)之间的差异

df_a:
Time      Volume    ID    
1         5         1
2         6         2
3         7         3

输出将向dfu a追加一个新列,其中两个id相等的卷列(df_a.volume-df_b.volume)之间具有差异

df_a:

Time      Volume    ID    Diff   
1         5         1     2
2         6         2     4
3         7         3     3


如果每个数据帧中的每行ID都是唯一的:

df_a['Diff'] = df_a['Volume'] - df_a['ID'].map(df_b.set_index('ID')['Volume'])
输出:

   Time  Volume  ID  Diff
0     1       5   1     2
1     2       6   2     4
2     3       7   3     3

如果每个数据帧中的每行ID都是唯一的:

df_a['Diff'] = df_a['Volume'] - df_a['ID'].map(df_b.set_index('ID')['Volume'])
输出:

   Time  Volume  ID  Diff
0     1       5   1     2
1     2       6   2     4
2     3       7   3     3

一个选项是合并ID上的两个dfs,然后计算差异:

df_a = df_a.merge(df_b.drop(['Time'], axis=1), on="ID", suffixes=['', '2'])
df_a['Diff'] = df_a['Volume'] - df_a['Volume2']
df:


一个选项是合并ID上的两个dfs,然后计算差异:

df_a = df_a.merge(df_b.drop(['Time'], axis=1), on="ID", suffixes=['', '2'])
df_a['Diff'] = df_a['Volume'] - df_a['Volume2']
df:


合并“ID”上的两个数据帧,然后取其差异:

import pandas as pd

df_a = pd.DataFrame({'Time': [1,2,3], 'Volume': [5,6,7], 'ID':[1,2,3]})
df_b = pd.DataFrame({'Time': [1,2,3], 'Volume': [2,3,4], 'ID':[2,1,3]})

merged = pd.merge(df_a,df_b, on = 'ID')
df_a['Diff'] = merged['Volume_x'] - merged['Volume_y']

print(df_a)
#output:

   Time  Volume  ID  Diff
0     1       5   1     2
1     2       6   2     4
2     3       7   3     3

合并“ID”上的两个数据帧,然后取其差异:

import pandas as pd

df_a = pd.DataFrame({'Time': [1,2,3], 'Volume': [5,6,7], 'ID':[1,2,3]})
df_b = pd.DataFrame({'Time': [1,2,3], 'Volume': [2,3,4], 'ID':[2,1,3]})

merged = pd.merge(df_a,df_b, on = 'ID')
df_a['Diff'] = merged['Volume_x'] - merged['Volume_y']

print(df_a)
#output:

   Time  Volume  ID  Diff
0     1       5   1     2
1     2       6   2     4
2     3       7   3     3