假设我有一个股票,我有一个分钟的价格和数量的数据框:
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价格)。当然,人们可以选择一个随机列,但这似乎在道德上是不纯的,浪费内存。我可能错过了一些非常明显的东西,但是什么呢?
答案 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