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

pandas处理股票OHLC数据时如何获取满足条件的行索引?

解决pandas OHLC数据查找最高价对应索引及区间最低价的方案

1. 获取2021年最高价对应的日期索引

推荐直接使用idxmax()方法,一步拿到最大值对应的索引,写法更简洁:

# 推荐用loc替代链式索引,避免潜在的SettingWithCopyWarning问题
max_high_date = df.loc['2021', 'high'].idxmax()

如果2021年有多个交易日的high值都是最大值,idxmax()只会返回第一个出现的日期,如果你需要获取所有符合条件的日期,可以用如下写法:

max_high = df.loc['2021', 'high'].max()
# 得到所有最高价对应的日期索引数组
max_high_dates = df.loc['2021', 'high'][df.loc['2021', 'high'] == max_high].index

2. 计算指定起始日到最高价日之间的low列最小值

拿到最高价日期后,直接用索引切片筛选区间即可:

start_date = '2020-01-02'
# 直接对索引区间切片,计算low列最小值
min_low = df.loc[start_date:max_high_date, 'low'].min()

注意事项

  • 操作前先确认你的date索引是datetime类型,如果是字符串格式的索引会导致日期切片异常,可先执行转换:df.index = pd.to_datetime(df.index)
  • 尽量避免使用df['2021']['high']这类链式索引写法,改为df.loc['2021', 'high'],可减少不必要的警告和潜在bug
  • 写日期区间切片时注意引号闭合,比如你示例中的写法存在语法错误,正确闭合写法为df['2020-01-02':'2021-01-03']['low'].min(),更推荐用loc写法:df.loc['2020-01-02':'2021-01-03', 'low'].min()
  • 如果获取到了多个最高价日期,可根据需求选择最早/最晚的日期再切片:比如取最晚的最高价日期用max_high_date = max_high_dates.max(),取最早的用max_high_date = max_high_dates.min()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:09:01