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

在Pandas中替代.min()计算股票时间序列的历史最低值

解决方案

首先确保你的Date列是datetime类型,然后通过分组排序+累积最小值移位的方式实现需求:

import pandas as pd
import numpy as np

# 转换Date列为datetime(如果还不是的话)
df['Date'] = pd.to_datetime(df['Date'])

# 保存原始索引,用于恢复数据顺序
df['_temp_idx'] = df.index

# 按股票ID分组,组内按日期升序排列(从最早到最晚)
df_sorted = df.sort_values(['Stock_ID', 'Date'])

# 计算每个股票分组内的累积最小值,再移位1行,得到当前日期之前的历史最低
df_sorted['Historical_low'] = df_sorted.groupby('Stock_ID')['Price'] \
    .expanding(min_periods=1).min() \
    .reset_index(level=0, drop=True) \
    .shift(1)

# 恢复到原始数据的顺序,删除临时索引列
df = df_sorted.sort_values('_temp_idx').drop('_temp_idx', axis=1)

执行后得到的结果完全符合你的期望输出。


你的代码问题分析
  1. 拼写错误:

    • gropuby 应为 groupby
    • ['Stock_ID','Date] 缺少右引号,正确写法是 ['Stock_ID','Date']
  2. 逻辑错误:

    • df.groupby('Stock_ID')['Price'].min() 计算的是每只股票的全局最低值,而不是你需要的「当前日期之前的历史最低值」
    • 仅按日期降序排序,但没有处理「仅使用当前日期之前的数据」的逻辑,导致结果包含未来数据或全局值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:31:08