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

