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

Python实现滚动透视表:找出滚动周期内成交量最高的tradePrice

滚动周期内成交量最高成交价的实现方案

我来帮你解决这个问题——结合你已经实现的1分钟周期版本,我们可以轻松扩展到任意滚动时间窗口(比如10分钟、5分钟等)的计算,最终得到你想要的结果结构。

先理清楚核心需求

你需要的是:针对每个时间点,回溯指定长度的滚动时间窗口(比如过去10分钟),找出窗口内成交量总和最高的成交价,同时输出该成交价对应的总成交量,最终输出类似这样的DataFrame:

TimePriceVolume
02:00:00 AM1255993
02:01:00 AM125627
02:10:00 AM12549.595

你已经用groupby+自定义函数实现了1分钟周期的计算,我补全了你没写完的函数逻辑:

def f(x): # 找出POC价格和对应成交量
    # 按成交价分组,计算每组的总成交量(比单纯统计次数更准确)
    price_vol_sum = x.groupby('tradePrice')['tradeVolume'].sum()
    top_price = price_vol_sum.idxmax()
    top_vol = price_vol_sum.loc[top_price]
    return pd.Series([top_price, top_vol], index=['Price', 'Volume'])

滚动窗口的具体实现步骤

要支持任意时间周期的滚动计算,我们可以用pandas的rolling方法结合自定义聚合函数,具体操作如下:

1. 先处理时间列格式

这是使用时间窗口的前提,确保你的时间列是datetime格式,最好设为索引方便后续操作:

import pandas as pd

# 假设你的时间列名为'timestamp'
df['timestamp'] = pd.to_datetime(df['timestamp'])
df = df.set_index('timestamp')

2. 定义滚动聚合函数

这个函数会接收滚动窗口内的子DataFrame,计算出窗口内成交量最高的成交价及对应总成交量:

def rolling_poc(window_data):
    # 按成交价分组,求和每组的成交量
    price_total_vol = window_data.groupby('tradePrice')['tradeVolume'].sum()
    # 找出成交量最大的成交价
    highest_vol_price = price_total_vol.idxmax()
    # 获取对应的总成交量
    highest_volume = price_total_vol.loc[highest_vol_price]
    # 返回结果系列
    return pd.Series([highest_vol_price, highest_volume], index=['Price', 'Volume'])

3. 应用滚动窗口计算

用rolling指定时间窗口,比如'10T'代表10分钟(T是分钟的缩写,你可以换成'5T'、'1H'等任意周期),然后应用上面的函数:

# raw=False表示传入函数的是完整的DataFrame而非数组
rolling_results = df.rolling(window='10T').apply(rolling_poc, raw=False)

# 重置索引,把时间列放回DataFrame中,方便查看
rolling_results = rolling_results.reset_index().rename(columns={'timestamp': 'Time'})

4. 性能优化小技巧

如果你的数据量很大,直接用rolling+自定义函数可能会有点慢,可以先做一层预聚合(比如按1分钟粒度聚合相同价格的成交量),再进行滚动计算,能大幅提升运行速度:

# 先按1分钟+成交价聚合,减少后续计算的数据量
pre_aggregated = df.groupby([pd.Grouper(freq='1T'), 'tradePrice'])['tradeVolume'].sum().reset_index()
# 再对预聚合后的数据应用滚动计算
rolling_results = pre_aggregated.set_index('timestamp').rolling(window='10T').apply(rolling_poc, raw=False)

结果验证

你可以把输出的rolling_results和Excel透视表对比,比如02:10:00 AM这个时间点,滚动窗口包含了02:00到02:10的所有数据,此时成交量最高的成交价是12549.5,对应成交量95,和你预期的结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:54:10