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

基于Pandas DataFrame按日计算VWAP指标的实现方法问询

按日计算分时股票数据的VWAP(成交量加权平均价)

问题背景

现有分时股票数据存储在DataFrame中,原代码计算的VWAP是基于全量数据的累计值,无法实现按日独立计算——即仅用当日分时数据累计,不跨日计算VWAP。

解决方案

核心逻辑是按日期分组处理,对每个交易日的分时数据单独计算VWAP,再合并回原DataFrame。具体步骤如下:

  1. 转换日期格式并提取分组键,确保同一交易日的分时数据被归为一组;
  2. 定义VWAP计算函数,对每组数据单独执行累计计算;
  3. 通过分组应用函数完成计算,合并结果。

完整代码

import pandas as pd

# 假设数据已加载到df中
# 1. 转换Date列为datetime类型,提取纯日期作为分组键
df['Date'] = pd.to_datetime(df['Date'])
df['trade_date'] = df['Date'].dt.date

# 2. 定义单组VWAP计算函数
def calc_daily_vwap(group):
    volume = group['Volume']
    typical_price = (group['Low'] + group['Close'] + group['High']) / 3
    group['vwap'] = (typical_price * volume).cumsum() / volume.cumsum()
    return group

# 3. 按日期分组计算,合并结果
df = df.groupby('trade_date').apply(calc_daily_vwap)

# 可选:删除临时分组列
df = df.drop('trade_date', axis=1)

代码说明

  • pd.to_datetime(df['Date']):将字符串格式的日期转为datetime对象,方便后续提取日期部分;
  • df['Date'].dt.date:提取不含时分秒的纯日期(如2022-05-02),作为分组依据,确保同一天的分时数据被归为一组;
  • groupby('trade_date').apply(calc_daily_vwap):对每个交易日的数据单独执行VWAP计算,每组的cumsum()仅在当日数据内累计,完全隔离不同日期的数据;
  • VWAP计算逻辑与原代码一致:先计算典型价格typical_price,再通过(典型价格×成交量)累计和 / 成交量累计和得到当日逐时段的VWAP。

验证要点

计算完成后可检查:某交易日第一条数据的VWAP等于该时段的典型价格,后续数值仅基于当日累计数据变化,不会受到前一日数据的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:51:52