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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:39:05