Python 使用pandas在合并期间计算

Python 使用pandas在合并期间计算,python,merge,pandas,Python,Merge,Pandas,合并数据帧时,是否有方法在列之间执行计算?例如,假设我有以下两个DFs,我想将相应ID的数据相乘: df1 = DataFrame({'id':['a','b','c'], 'data':[8,7,12]}) df2 = DataFrame({'id':['b','a','c'], 'data':[3,2,1]}) 所需的输出将是: id data 0 a 16 1 b 21 2 c 12 我知道可以通过合并和相乘来实现这一点: merged = pd.mer

合并数据帧时,是否有方法在列之间执行计算?例如,假设我有以下两个DFs,我想将相应ID的数据相乘:

df1 = DataFrame({'id':['a','b','c'], 'data':[8,7,12]})

df2 = DataFrame({'id':['b','a','c'], 'data':[3,2,1]})
所需的输出将是:

  id  data
0  a    16
1  b    21
2  c    12
我知道可以通过合并和相乘来实现这一点:

merged = pd.merge(df1, df2, how='left', on=['id'])
merged['data'] = merged.data_x * merged.data_y
merged[['id', 'data']]
然而,对于大量的列,这是相当麻烦的,特别是因为合并的列名具有
\ux
\uy
后缀。我想要的基本上等同于以下SQL:

SELECT a.id, a.data * b.data AS 'data'
FROM table a
LEFT JOIN table b 
ON a.id = b.id

在这种情况下,您可以简单地设置索引,然后乘以:

>>> df1 = pd.DataFrame({'id':['a','b','c'], 'data':[8,7,12]})
>>> df2 = pd.DataFrame({'id':['b','a','c'], 'data':[3,2,1]})
>>> df1.set_index("id") * df2.set_index("id")
    data
id      
a     16
b     21
c     12
使用
reset\u索引
,如果您愿意:

>>> (df1.set_index("id") * df2.set_index("id")).reset_index()
  id  data
0  a    16
1  b    21
2  c    12