Pandas按天分组计算分钟K线每日VWAP的实现方法
按日期分组计算每日VWAP的实现方案
核心逻辑
按已有日期字段分组后,对每个交易日的1分钟K线独立执行VWAP累积计算,避免跨天数据干扰计算结果。
高效实现代码
假设你的日期标识列名为trade_date,可直接使用下方向量化计算方案,性能远高于逐组apply:
# 计算单根K线的成交量*典型价格中间值 df['pv'] = df['v'] * (df['h'] + df['l']) / 2 # 按日期分组分别做累积求和后相除,得到每日滚动VWAP df['daily_vwap'] = df.groupby('trade_date')['pv'].cumsum() / df.groupby('trade_date')['v'].cumsum()
如果你不需要保留中间列pv,也可以合并为单一行写法:
df['daily_vwap'] = df.groupby('trade_date').apply( lambda x: (x.v*(x.h+x.l)/2).cumsum() / x.v.cumsum() ).reset_index(level=0, drop=True)
注意事项
- 请将代码中的
trade_date替换为你实际使用的日期列名称 - 计算前请确认数据集已经按「日期+时间」升序排列,否则累积求和的结果会不符合预期
- 第一种全向量化写法性能最优,即使处理数百万行级别的1分钟K线数据也不会有明显延迟
内容的提问来源于stack exchange,提问作者jdkealy
相关产品推荐
相关产品推荐

