You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中重采样并计算成交量加权平均价格?

问题:计算1分钟周期内基于成交量的加权平均价格

我有一份包含交易数据的DataFrame,每笔交易包含amount(成交量)和price(价格)字段,数据示例如下:

>>> df
                          amount     price
datetime                                  
2023-06-23 10:55:40.420  0.04657  30106.01
2023-06-23 10:55:42.348  0.00085  30104.54
2023-06-23 10:55:42.491  0.00368  30104.54
2023-06-23 10:55:43.211  0.03008  30104.54
2023-06-23 10:55:45.910  0.00035  30101.56
...                          ...       ...
2023-06-23 10:58:06.401  0.00863  30108.00
2023-06-23 10:58:06.661  0.00829  30108.00
2023-06-23 10:58:07.474  0.00305  30108.00
2023-06-23 10:58:07.599  0.00048  30108.00
2023-06-23 10:58:08.393  0.00041  30108.00

[428 rows x 2 columns]

我已经能通过以下代码实现1分钟周期的成交量重采样求和:

>>> df['amount'].resample("1Min").sum()
datetime
2023-06-23 10:55:00     0.78885
2023-06-23 10:56:00    12.84216
2023-06-23 10:57:00     9.56456
2023-06-23 10:58:00     0.08334
Freq: T, Name: amount, dtype: float64

请问如何计算每个1分钟周期内基于成交量的加权平均价格?


解答

基于成交量的加权平均价格(VWAP)核心公式为:(成交量×价格的总和) ÷ 成交量的总和,可以通过两种简洁方式实现:

方法一:分步计算

先拆分计算逻辑,更直观易懂:

  1. 新增列计算每笔交易的成交额(成交量×价格)
  2. 分别对成交额、成交量按1分钟周期重采样求和
  3. 用成交额总和除以对应周期的成交量总和,得到加权平均价格

代码示例:

# 计算每笔交易的成交额
df['turnover'] = df['amount'] * df['price']

# 按1分钟周期重采样,分别求和成交额与成交量
turnover_sum = df['turnover'].resample('1Min').sum()
amount_sum = df['amount'].resample('1Min').sum()

# 计算加权平均价格
vwap = turnover_sum / amount_sum

执行后会得到类似结果:

>>> vwap
datetime
2023-06-23 10:55:00    30104.87
2023-06-23 10:56:00    30105.22
2023-06-23 10:57:00    30106.15
2023-06-23 10:58:00    30108.00
Freq: T, dtype: float64

方法二:用resample.apply()一步完成

无需新增列,直接在重采样时自定义计算逻辑:

vwap = df.resample('1Min').apply(lambda x: (x['amount'] * x['price']).sum() / x['amount'].sum())

该方法通过apply传入匿名函数,在每个1分钟周期内直接完成加权平均计算。


内容的提问来源于stack exchange,提问作者Florent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:23:22