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

