如何使用pandas按ts_code分组筛选high列最大值对应索引日期后的数据
pandas实现按分组最大值日期筛选后续所有数据
前提说明
假设你的原始数据集存储在变量df中,且已经将交易日期设置为datetime64[ns]类型的索引。
完整实现代码
import pandas as pd # 1. 构建每个ts_code与high最大值对应日期的映射 # 先重置索引提取日期列,方便后续匹配 df_temp = df.reset_index(names="trade_date") # 取每个ts_code分组下high最大值对应的行,提取日期生成映射 max_date_mapping = df_temp.loc[df_temp.groupby("ts_code")["high"].idxmax()].set_index("ts_code")["trade_date"] # 2. 分组筛选每个ts_code下最大值日期及之后的所有数据 res = df_temp.groupby("ts_code", group_keys=False).apply( lambda group: group[group["trade_date"] >= max_date_mapping[group.name]] # 恢复原索引结构并按日期排序 ).set_index("trade_date").sort_index()
代码逻辑说明
- 第一步通过
groupby+idxmax定位每个ts_code分组下high最大值对应的行,提取对应日期生成映射关系,避免后续分组内重复计算 - 第二步分组后逐组匹配对应最大日期,筛选出日期大于等于该值的所有行,最后恢复索引结构即可得到符合要求的结果
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

