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

如何在Pandas中为DataFrame添加每日指定时间开盘价列

问题描述

我有一个存储半小时级数据的Pandas DataFrame,数据结构如下:

DateTime     Open     High      Low    Close  Volume
0 2005-09-06 17:00:00  1103.00  1103.50  1103.00  1103.25     744

我想为该数据添加名为“Daily_Open”的列,该列的值为对应日期14:30的开盘价,并填充到当日的所有行中。假设每天有10条半小时数据行。在TSQL中我会使用关联子查询或基于日期部分的连接来实现。

我尝试了以下代码:

data = pd.read_csv("ESHalf.txt", )
data.rename(columns={"Close/Last": "Close"}, inplace=True)
data.columns = ["DateTime", "Open", "High", "Low", "Close", "Volume"]

data["DateTime"] = pd.to_datetime(data["DateTime"])
data["Date"] = data["DateTime"].dt.date

open_cond = (data["DateTime"].dt.hour == 9) & (data["DateTime"].dt.minute == 30)

data["Daily_Low"] = data["Open"][open_cond]

这段代码能成功提取目标时间的开盘价,但将其应用到原DataFrame时,非14:30时间的行都出现了NaN。我觉得可以使用apply或transform方法来解决,请问有什么可行方案?

解决方案

方法1:groupby + transform(符合你提到的transform思路)

先筛选出每日14:30的开盘价,再按日期分组后用transform把对应值填充到当日所有行:

# 修正条件:需求是14:30,原代码写的是9:30,注意这里调整
open_cond = (data["DateTime"].dt.hour == 14) & (data["DateTime"].dt.minute == 30)
# 提取日期与对应14:30开盘价的映射
daily_open_map = data.loc[open_cond, ["Date", "Open"]].set_index("Date")["Open"]
# 分组后用transform填充
data["Daily_Open"] = data.groupby("Date")["Date"].transform(lambda x: daily_open_map.loc[x.iloc[0]])

方法2:map方法(简洁高效)

构建日期到目标开盘价的字典,直接用map匹配填充:

open_cond = (data["DateTime"].dt.hour == 14) & (data["DateTime"].dt.minute == 30)
# 生成日期到14:30开盘价的字典
daily_open_dict = data.loc[open_cond].set_index("Date")["Open"].to_dict()
# 映射到原DataFrame
data["Daily_Open"] = data["Date"].map(daily_open_dict)

这种方法性能较好,适合处理大规模数据。

方法3:merge(对应TSQL的连接逻辑)

把每日14:30的数据单独提取为一个小DataFrame,再按日期和原表做左连接,和你熟悉的TSQL关联思路一致:

open_cond = (data["DateTime"].dt.hour == 14) & (data["DateTime"].dt.minute == 30)
# 提取每日14:30的开盘价并重命名列
daily_open_df = data.loc[open_cond, ["Date", "Open"]].rename(columns={"Open": "Daily_Open"})
# 左连接原表
data = data.merge(daily_open_df, on="Date", how="left")

注意:原代码中条件写的是9:30,但需求是14:30,记得修正小时数,避免结果不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:45:35