使用pandas在合并时计算

4 投票
1 回答
2552 浏览
提问于 2025-04-18 09:08

有没有办法在合并 pandas 数据框时进行列之间的计算?比如说,我有以下两个数据框(DF),我想把对应的 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']]

但是,对于很多列来说,这样做就显得很麻烦,尤其是合并后的列名会有 _x_y 的后缀。我想要的其实是 pandas 中类似于以下 SQL 的功能:

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

1 个回答

3

在这种情况下,你可以简单地设置索引,然后进行乘法运算:

>>> 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_index 来重置索引:

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

撰写回答