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

pandas如何获取列值较前一行变动超±7的行索引并分类标记

实现方案

核心规则对齐预期结果梳理如下:

  • 首行(索引0)无前置参考值,默认归入事件1分组
  • 逐行计算当前行val列与前一行的差值:
    • 差值大于7时,当前行切换为事件1分组
    • 差值小于-7时,当前行切换为事件2分组
    • 差值在[-7, 7]区间内时,沿用上一行的分组归属
  • 最终分别提取两类分组对应的行索引即可

完整可运行代码:

import pandas as pd

# 构造测试DataFrame
df1 = pd.DataFrame({ 'val': [997.95, 997.97, 989.17, 999.72, 984.66, 1902.15]})

# 计算val列与前一行的差值
df1['diff'] = df1['val'].diff()

# 初始化标签列
df1['label'] = pd.NA
# 首行默认标记为事件1
df1.loc[0, 'label'] = 1
# 跌幅超过7的位置标记为事件2
df1.loc[df1['diff'] < -7, 'label'] = 2
# 涨幅超过7的位置标记为事件1
df1.loc[df1['diff'] > 7, 'label'] = 1
# 未触发阈值的行向前填充标签,延续上一分组
df1['label'] = df1['label'].ffill()

# 提取两类事件对应的索引列表
one = df1[df1['label'] == 1].index.tolist()
two = df1[df1['label'] == 2].index.tolist()

执行后得到的结果与预期完全一致:

>>> print(one)
[0, 1, 3, 5]
>>> print(two)
[2, 4]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:15:47