【问题标题】:Calculate during merge using pandas在合并期间使用 pandas 计算
【发布时间】:2014-06-09 14:43:22
【问题描述】:

在合并 pandas DataFrames 时,有没有办法在列之间执行计算?例如,假设我有以下两个 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

【问题讨论】:

    标签: python merge pandas


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2020-01-05
      • 2018-04-23
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      相关资源
      最近更新 更多