组合多个列pandas groupby

时间:2018-01-31 20:58:02

标签: python pandas pandas-groupby

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

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 个答案:

答案 0 :(得分:1)

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