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

使用Pandas DataFrame合并日线与5分钟数据并添加前两根K线列

解决方案

要实现将5分钟线的前两根K线数据合并到日线数据中,可按以下步骤操作:

1. 构造示例数据(真实场景可跳过)

先还原示例中的两个DataFrame,方便测试代码:

import pandas as pd

# 日线数据
dailyDf = pd.DataFrame(
    {'Open': [100, 102], 'Close': [101, 103]},
    index=pd.Index(['01-01-2022', '01-02-2022'], name='Date')
)

# 5分钟线数据
fiveMinDf = pd.DataFrame(
    {'Open': [100.1, 100.3, 100.9, 100.6, 100.8, 100.9],
     'Close': [100.2, 100.4, 100.9, 100.7, 100.49, 100.9]},
    index=pd.Index(['01-01-2022-9.30', '01-01-2022-9.35', '01-01-2022-9:40',
                    '01-02-2022-9.30', '01-02-2022-9.35', '01-02-2022-9:40'], name='Datetime')
)

2. 处理5分钟线数据

拆分日期与时间

从5分钟线的索引中提取日期和时间,统一时间格式(将冒号替换为点):

fiveMinDf = fiveMinDf.reset_index()
# 拆分索引为日期和时间两列
fiveMinDf[['Date', 'Time']] = fiveMinDf['Datetime'].str.split('-', n=1, expand=True)
# 统一时间格式,把9:40转为9.40
fiveMinDf['Time'] = fiveMinDf['Time'].str.replace(':', '.')

筛选每个交易日的前两根K线

按日期分组,保留每组的前两行数据:

top_two_k = fiveMinDf.groupby('Date').head(2)

转换为宽格式生成目标列

将数据转为宽格式,把时间作为列名的一部分,生成open_5min_9.30这类格式的列名:

# 透视转换为宽格式
wide_5min = top_two_k.pivot(
    index='Date',
    columns='Time',
    values=['Open', 'Close']
).rename_axis(columns=[None, None])

# 合并多级列名,生成最终列名
wide_5min.columns = [f'{col[0]}_5min_{col[1]}' for col in wide_5min.columns]

3. 合并日线与处理后的5分钟数据

用join方法按日期合并两个DataFrame:

merged_df = dailyDf.join(wide_5min)

最终得到的merged_df即为目标结果:

Open  Close  open_5min_9.30  open_5min_9.35  close_5min_9.30  close_5min_9.35
Date                                                                                    
01-01-2022  100    101           100.1           100.3            100.2            100.4
01-02-2022  102    103           100.6           100.8            100.7            100.49

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:56:04