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

如何在时间序列股票数据中固定每日首个价格值

问题解决:生成每日初始价格填充列

新手踩坑点

  • 分组后没搞懂如何把组内单一值映射回所有行,直接拿分组结果赋值,导致长度不匹配
  • 错误用Time_IDX分组,忽略了DATE才是区分每日数据的唯一键,结果完全偏离需求
  • 用全局loc筛选Time_IDX=1仅得到2行数据,直接往14行的DataFrame里赋值,因长度不匹配报错

可行解决方法

方法1:Groupby + transform(最推荐)

transform的核心作用就是把组内计算结果,对应填充到原DataFrame的每一行,完美适配需求:

import pandas as pd

# 构造示例数据
data = {
    'DATE': ['2024-01-01']*7 + ['2024-01-02']*7,
    'Time_IDX': [1,2,3,4,5,6,7]*2,
    'Price': [288,298,301,289,300,287,295,302,305,310,299,300,285,290]
}
df = pd.DataFrame(data)

# 按DATE分组,提取每组Time_IDX=1的Price,用transform映射到所有行
df['Price_0'] = df.groupby('DATE')['Price'].transform(lambda group: group[df.loc[group.index, 'Time_IDX'] == 1].iloc[0])

方法2:分步提取+合并(新手友好)

拆成两步,逻辑更清晰,容易理解:

  1. 先提取每日Time_IDX=1的价格,作为基准表:
daily_base = df[df['Time_IDX'] == 1][['DATE', 'Price']].rename(columns={'Price': 'Price_0'})
  1. 将基准表与原DataFrame按DATE合并,自动为每行填充对应日期的初始价格:
df = df.merge(daily_base, on='DATE', how='left')

方法3:字典映射(简单直观)

先构建「日期→初始价格」的映射字典,再用map完成批量赋值:

# 生成日期到初始价格的映射字典
price_map = df[df['Time_IDX'] == 1].set_index('DATE')['Price'].to_dict()
# 按DATE列映射填充新列
df['Price_0'] = df['DATE'].map(price_map)

之前尝试失败的核心原因

  • 单独用groupby('DATE')后直接取Price,得到的是仅2行的分组聚合结果,无法匹配原DataFrame的14行数据
  • 错误选择Time_IDX作为分组键,而Time_IDX是每日重复的标识,分组后会把两天的同一时间点数据归为一组,完全不符合需求
  • 设置Time_IDX为索引后,因索引重复,无法区分不同日期的同一Time_IDX,无法精准提取每日的初始价格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:12:24