使用自定义体积加权聚合对熊猫进行重新采样

时间:2018-08-16 14:19:05

标签: python pandas resampling

我正在尝试基于5秒钟的时间步长进行批量加权价格汇总,为此我有多个数据点。通过传递聚合类型的字典,我可以获得单个字段的简单均值和求和聚合。但是,要生成数量加权聚合,我需要同时使用“定价”和“数量”字段来为每个步骤生成此数量。

                    TS          P           Q
D           
2018-01-01 00:00:00 1514764800  1673574.0   0.164012
2018-01-01 00:00:00 1514764800  1673954.0   0.006000
2018-01-01 00:00:00 1514764800  1673967.0   0.005808
2018-01-01 00:00:00 1514764800  1673949.0   0.040000
2018-01-01 00:00:00 1514764800  1673573.0   0.159234
2018-01-01 00:00:00 1514764800  1673569.0   0.007000
2018-01-01 00:00:00 1514764800  1673949.0   0.100000
2018-01-01 00:00:00 1514764800  1673569.0   0.008000
2018-01-01 00:00:00 1514764800  1673949.0   0.033000
2018-01-01 00:00:00 1514764800  1673346.0   0.033000
2018-01-01 00:00:01 1514764801  1673967.0   0.212200
2018-01-01 00:00:02 1514764802  1673954.0   0.006765
2018-01-01 00:00:03 1514764803  1673950.0   0.012000
2018-01-01 00:00:03 1514764803  1673955.0   0.005700
2018-01-01 00:00:03 1514764803  1673642.0   0.031197
2018-01-01 00:00:03 1514764803  1673949.0   0.067654

数量权重公式应该简单地是数量x价格的累计总和除以该期间的总量。

是否可以通过使用价格和数量系列以返回VWAP的自定义汇总来做到这一点?

感谢任何建议,谢谢!

1 个答案:

答案 0 :(得分:1)

使用.apply可以编写所需的任何自定义聚合函数。

def vwap(data):
    return (data.P * data.Q).sum() / data.Q.sum()

使用石斑鱼时,您可以像这样应用它:

df.groupby(pd.Grouper(freq="5s")).apply(vwap)

通过重新采样,也可以使用.apply

df.resample("5s").apply(vwap)