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
相关产品推荐
相关产品推荐

