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

Python DataFrame按Finaldate与FLAG分组生成4小时OHLC数据的语法

股票数据按自定义标识聚合为4小时OHLC的Python实现

我刚接触Python,需要将15分钟级别股票数据聚合为4小时OHLC数据。由于美国股市于CST时间8:30开盘,4小时K线并非严格的4小时周期,因此已为每日的每个4小时K线创建FLAG标识。现有如下DataFrame:

Volume|Open|Close|High|Low|Ticker|Finaldate|Time|FLAG
5887869|130.465|131.05|131.44|130.465|AAPL|1/9/2023|8:30:00|1
4094933|131.05|132.015|132.06|130.53|AAPL|1/9/2023|8:45:00|1
3942758|132.01|132.13|132.63|131.3218|AAPL|1/9/2023|9:00:00|1
3481345|132.145|132.565|132.735|131.96|AAPL|1/9/2023|9:15:00|1
2526194|132.575|132.735|132.8375|132.4636|AAPL|1/9/2023|9:30:00|1
2756892|132.73|132.74|133.14|132.66|AAPL|1/9/2023|9:45:00|1
2679936|132.74|133.2101|133.34|132.67|AAPL|1/9/2023|10:00:00|1
2366166|133.23|133.085|133.41|132.97|AAPL|1/9/2023|10:15:00|1
2040521|133.09|132.97|133.18|132.8|AAPL|1/9/2023|10:30:00|1
1643790|132.9679|132.945|133.12|132.81|AAPL|1/9/2023|10:45:00|1
1597548|132.94|132.82|132.955|132.57|AAPL|1/9/2023|11:00:00|1
1360285|132.8101|132.745|132.8415|132.6|AAPL|1/9/2023|11:15:00|1
1337147|132.74|132.26|132.83|132.25|AAPL|1/9/2023|11:30:00|1
2046411|132.26|132.459|132.53|132.255|AAPL|1/9/2023|11:45:00|1
1378193|132.46|132.42|132.64|132.26|AAPL|1/9/2023|12:00:00|1
1207053|132.4201|132.495|132.569|132.35|AAPL|1/9/2023|12:15:00|1
2149979|132.495|131.62|132.5101|131.57|AAPL|1/9/2023|12:30:00|2
2455293|131.62|131.395|131.625|131.19|AAPL|1/9/2023|12:45:00|2
2363314|131.39|131.47|131.726|131.2411|AAPL|1/9/2023|13:00:00|2
1812985|131.465|131.495|131.66|131.3|AAPL|1/9/2023|13:15:00|2
1727193|131.49|131.09|131.5667|130.95|AAPL|1/9/2023|13:30:00|2
1609277|131.09|130.67|131.16|130.59|AAPL|1/9/2023|13:45:00|2
1751837|130.68|130.37|130.82|130.36|AAPL|1/9/2023|14:00:00|2
1773304|130.3661|130.445|130.7|130.34|AAPL|1/9/2023|14:15:00|2
2017340|130.45|130.5|130.655|130.16|AAPL|1/9/2023|14:30:00|2
4098579|130.51|130.19|130.52|129.89|AAPL|1/9/2023|14:45:00|2

聚合要求

按Finaldate和FLAG分组,实现以下规则:

  • Open:取分组内第一个值
  • High:取分组内最大值
  • Low:取分组内最小值
  • Close:取分组内最后一个值
  • Volume:对分组内数值求和
  • Time:取分组内最小值
    同时保留Ticker、Finaldate字段内容。

实现代码

使用Pandas的groupby结合agg方法即可完成需求,代码如下:

import pandas as pd

# 假设你的原始数据存储在DataFrame df中
aggregated_df = df.groupby(['Finaldate', 'FLAG'], as_index=False).agg(
    Ticker=('Ticker', 'first'),
    Open=('Open', 'first'),
    High=('High', 'max'),
    Low=('Low', 'min'),
    Close=('Close', 'last'),
    Volume=('Volume', 'sum'),
    Time=('Time', 'min')
)

代码说明

  • groupby(['Finaldate', 'FLAG'], as_index=False):按指定的日期和标识字段分组,as_index=False确保分组字段作为普通列保留,不转为索引
  • agg方法接收字典参数,键是聚合后的列名,值为(原列名, 聚合函数)的元组,明确指定每个字段的聚合逻辑
  • Ticker字段使用first是因为同一分组内的股票代码一致,取任意一个值都可保证正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:44:57