python - 使用 Pandas 在合并期间计算

标签 python merge pandas

有没有办法在合并 pandas DataFrame 时在列之间执行计算?比如我有下面两个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 后缀。我想要的基本上是以下 SQL 的 pandas 等效项:

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_index:

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

关于python - 使用 Pandas 在合并期间计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24122717/

相关文章:

python - 通过在空白处拆分值来创建新的 pyspark 数据框列

python - 在 Python 中使用 ijson 更新 JSON 值

python - 按列组合 CSV 文件

git:我可以只 merge 存储库的子路径吗?

python - 在 Python 中将带有选定列标题的 CSV 读取到一个 CSV 文件中(按行读取)

Python numpy 和 pandas 矩阵维度

java - JPA 合并,包括子项

python - 剥离数据框单元格然后创建列

Python Pandas : boolean function in Data Frame

python - Pandas :过滤多列