代码之家  ›  专栏  ›  技术社区  ›  Igor Rivin

组合多个列pandas groupby

  •  1
  • Igor Rivin  · 技术社区  · 7 年前

    假设我有一只股票,我有一个minte的价格和数量数据框:

    close   high    low open    symbol  timestamp   tradingDay  volume
    0   116.02  116.02  116.02  116.02  AAPL    2017-01-03 04:03:00-05:00   
    2017-01-03  200
    1   116.14  116.14  116.14  116.14  AAPL    2017-01-03 04:06:00-05:00   
    2017-01-03  100
    2   116.15  116.24  116.12  116.14  AAPL    2017-01-03 04:07:00-05:00   
    2017-01-03  1370
    3   116.13  116.15  116.13  116.15  AAPL    2017-01-03 04:08:00-05:00   
    2017-01-03  1100
    4   116.15  116.15  116.15  116.15  AAPL    2017-01-03 04:09:00-05:00   
    2017-01-03  100
    

    (很抱歉格式化)

    我想将这些结合到“vwap”(按体积加权的平均价格)中,这似乎很容易:

    zoo= foo.groupby('tradingDay').agg( lambda x: x['close'].dot(x['volume'])/np.sum(x.volume))
    

    但结果对象的列数与原始数据帧的列数相同(每列都相同,并且等于所需的vwap价格)。当然,人们可以选择一个随机的列,但这似乎是道德上的不纯和记忆的浪费。我大概错过了一些非常明显的东西,但是什么呢?

    1 回复  |  直到 7 年前
        1
  •  2
  •   BENY    7 年前

    IIUC公司

    df.groupby('tradingDay').apply(lambda x: sum(x['close'].mul(x['volume']))/np.sum(x['volume']))
    Out[323]: 
    tradingDay
    2017-01-03    116.132927
    dtype: float64