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

如何将Pandas DataFrame中增减趋势的数值按标记拆分为数据块?

解决思路:基于局部极值拆分DataFrame数据

1. 识别局部极值(峰值/谷值)

你需要找的是局部最大值(峰值)或局部最小值(谷值),而非全局唯一的极值,这里提供两种可行方法:

  • 使用SciPy的find_peaks工具:这是定位序列局部峰的常用方法,还能通过参数过滤无效波动
    from scipy.signal import find_peaks
    import pandas as pd
    
    # 假设目标数据列名为'data'
    peaks, _ = find_peaks(df['data'], height=0, distance=10) 
    # peaks变量存储的就是所有峰值对应的DataFrame索引位置
    
  • 手动判断局部极值:通过相邻元素比较实现,比如当df['data'].iloc[i] > df['data'].iloc[i-1]且df['data'].iloc[i] > df['data'].iloc[i+1]时,i即为峰值位置(注意处理首尾边界)

2. 用极值索引拆分数据

拿到局部极值的索引后,就可以将原DataFrame切割为多个片段:

# 补充首尾索引,确保拆分覆盖全部数据
split_points = [0] + list(peaks) + [len(df)]

# 循环生成子DataFrame
data_splits = []
for i in range(len(split_points)-1):
    start_idx = split_points[i]
    end_idx = split_points[i+1]
    data_splits.append(df.iloc[start_idx:end_idx])

3. 适配谷值型红线的调整

如果图表红线对应是谷值(下降后的低点),只需对数据取反后再用find_peaks:

valleys, _ = find_peaks(-df['data'], height=0, distance=10)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:25:30