如何使用pandas链式方法筛选每组列最大值对应索引日期之后的数据
pandas链式筛选实现方案
以下实现完全匹配你给出的分步逻辑,无需创建中间变量,整合为单条链式调用即可得到目标结果:
out = ( # 保留每个ts_code的high最大值对应日期及之后的所有记录 df[df.index >= df.groupby('ts_code')['high'].transform('idxmax')] # 为每个ts_code的记录生成行号 .assign(row_num=lambda x: x.groupby('ts_code').cumcount()) # 仅保留每个分组的前2条记录(行号从0开始,<=1即前2条) .query('row_num <= 1') # 删除辅助计算的行号列 .drop('row_num', axis=1) )
运行后输出结果和你提供的示例完全一致:
ts_code low high 2021-08-01 885525.TI 7427.0 8552.0 2021-08-08 885525.TI 7300.0 7868.0 2021-08-15 885452.TI 2352.0 2459.0 2021-08-22 881105.TI 1656.0 1804.0 2021-08-22 885452.TI 2329.0 2415.0 2021-08-22 885641.TI 691.0 720.0
如果你偏好更简洁的写法,也可以用head方法替代行号筛选,逻辑完全等价:
out = ( df[df.index >= df.groupby('ts_code')['high'].transform('idxmax')] .groupby('ts_code') .apply(lambda x: x.head(2)) .reset_index(level=0, drop=True) )
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

