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

如何将分钟级OHLC数据按日分组并获取唯一日期记录?

问题描述

拥有包含timestamp、symbol等字段的分钟级OHLC数据DataFrame(共429005行12列),尝试通过以下代码按日期分组:

df['timestamp'] = pd.to_datetime(df['timestamp'])
days = df.groupby(df['timestamp'].dt.normalize().unique())
list_of_df = []
for index, name in days:
    list_of_df.append(name)
final = pd.concat(list_of_df)
print(final[['symbol', 'timestamp']])

执行后仍返回当日内的分钟级记录,需要修改代码以获取**按symbol和唯一日期(timestamp归一化为当日00:00:00+00:00)**的聚合记录。

原代码问题分析

原代码的分组逻辑存在错误:

  • df['timestamp'].dt.normalize().unique()返回的是所有唯一日期的数组,分组时仅按日期将所有行批量分组,但没有结合symbol做拆分
  • 循环拼接分组后的DataFrame本质上只是将原数据重新组合,没有做任何聚合操作,因此结果仍为分钟级记录
解决方案

根据需求选择以下两种实现方式:

方式1:每个Symbol每天保留一条记录(如取当日第一条)

如果仅需每个symbol每天保留一条样本(比如当日第一分钟的记录),可以按symbol和归一化后的日期分组,取每组第一条:

import pandas as pd

# 转换timestamp为datetime类型
df['timestamp'] = pd.to_datetime(df['timestamp'])
# 生成归一化到当日00:00的日期列
df['date'] = df['timestamp'].dt.normalize()

# 按symbol和date分组,保留每组第一条记录
result = df.groupby(['symbol', 'date'], as_index=False).first()

# 查看目标字段
print(result[['symbol', 'date']])

方式2:聚合OHLC字段(生成日线级数据)

如果需要将分钟级数据聚合为标准日线OHLC数据,可自定义聚合规则:

import pandas as pd

df['timestamp'] = pd.to_datetime(df['timestamp'])
df['date'] = df['timestamp'].dt.normalize()

# 定义OHLC字段的聚合规则
aggregation_rules = {
    'open': 'first',    # 当日开盘价取第一分钟数据
    'high': 'max',      # 当日最高价取分钟级最大值
    'low': 'min',       # 当日最低价取分钟级最小值
    'close': 'last',    # 当日收盘价取最后一分钟数据
    'volume': 'sum'     # 当日成交量求和
}

# 按symbol和date分组聚合
daily_data = df.groupby(['symbol', 'date'], as_index=False).agg(aggregation_rules)

# 查看日线级结果
print(daily_data[['symbol', 'date', 'open', 'high', 'low', 'close', 'volume']])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:41:07