Python 使用自定义卷加权聚合进行熊猫重采样

Python 使用自定义卷加权聚合进行熊猫重采样,python,pandas,resampling,Python,Pandas,Resampling,我正在尝试基于5秒的时间步长进行批量加权价格聚合,我有多个数据点。我可以通过传递聚合类型的dict来获得单个字段的简单平均值和总和聚合。但是,要生成一个数量加权聚合,我需要使用定价和数量字段来为每个步骤生成该聚合 TS P Q D 2018-01-01 00:00:00 1514764800 1673574.0 0.164012 2018-01-01 00:00:00 1514764800

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

                    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


任何建议都将不胜感激,谢谢

使用
.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)

使用
.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)

df.resample('5s').agg({'P':'last','Q':'sum'})
是我目前的方法,我想我可以使用你的方法将VWAP值连接到公共日期时间索引,我只是好奇是否有一种方法可以通过重新采样本机实现这一点?你应该能够在重新采样时使用
。应用
。我已经编辑了答案。
df.resample('5s').agg({'P':'last','Q':'sum'})
是我当前的方法,我想我可以用你的方法将VWAP值连接到公共日期时间索引,我只是好奇,是否有一种方法可以通过重新采样来实现这一点?您应该能够使用
。在重新采样时使用相同的方法。我已经编辑了答案。