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

如何将1分钟OHLC数据转换为其他时间周期(Python/Excel实现)

1分钟K线转30分钟K线的实现方案(Python+Excel)

Python实现

预处理数据

首先确保DataFrame的DateTime列是datetime类型,并将其设为索引,方便后续按时间聚合:

import pandas as pd

# 假设原始数据存储在df变量中
df['DateTime'] = pd.to_datetime(df['DateTime'])
df.set_index('DateTime', inplace=True)

30分钟周期聚合

使用resample按30分钟间隔分组,同时指定每个字段的聚合规则:

# 定义聚合规则:开盘价取时段第一个值,最高价取最大值,最低价取最小值,收盘价取时段最后一个值
aggregation_rules = {
    'Open': 'first',
    'High': 'max',
    'Low': 'min',
    'Close': 'last'
}

# 执行重采样与聚合,dropna移除无数据的时段
df_30min = df.resample('30T').agg(aggregation_rules).dropna()

# 将时间索引重新转为列
df_30min.reset_index(inplace=True)

这段代码会自动处理跨日问题,输出的df_30min就是符合要求的30分钟周期数据。

Excel实现

生成30分钟时段标签

替换你之前的公式,用FLOOR函数生成每个分钟数据对应的30分钟时段起始时间,完美解决跨日问题:

=FLOOR(A2, TIME(0,30,0))

将公式向下填充到所有行,得到每个数据所属的30分钟时段(例如2017-01-02 23:50:00会被转为2017-01-02 23:30:00,2017-01-03 00:10:00会被转为2017-01-03 00:00:00)。

计算各时段指标

假设新生成的时段列是B列,Open/C列、High/D列、Low/E列、Close/F列,先通过高级筛选提取所有唯一的时段值到G列,然后在对应行计算指标:

  • 开盘价(Open):取时段内第一个值
    =INDEX(C:C, MATCH(G2, B:B, 0))
    
  • 最高价(High):取时段内最大值(Excel 2019及以上可用)
    =MAXIFS(D:D, B:B, G2)
    
  • 最低价(Low):取时段内最小值(Excel 2019及以上可用)
    =MINIFS(E:E, B:B, G2)
    
  • 收盘价(Close):取时段内最后一个值
    =INDEX(F:F, MAXIFS(A:A, B:B, G2))
    

如果使用旧版Excel(无MAXIFS/MINIFS),可以用数组公式(输入后按Ctrl+Shift+Enter确认):

  • 最高价数组公式:
    =MAX(IF(B:B=G2, D:D))
    
  • 最低价数组公式:
    =MIN(IF(B:B=G2, E:E))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:17:11