如何在DataFrame的所有行中查找局部最大值?
如何在DataFrame的所有行中查找局部最大值?
要在DataFrame的每一行里定位局部最大值,我通常会用scipy.signal库中的argrelextrema函数,它能高效识别序列中的极值点。下面是完整的实现步骤和代码示例:
1. 先确认数据结构
首先可以打印DataFrame的前几行,快速了解数据形态:
print(df.head())
2. 导入依赖并计算每行的局部最大值位置
我们需要导入argrelextrema和numpy,然后遍历每一行,计算出每行的局部最大值索引:
from scipy.signal import argrelextrema import numpy as np ilocs_max = [] for i in range(df.shape[0]): # order=15表示该点在前后15个数据点范围内是最大值,可根据你的数据调整这个参数 row_max_indices = argrelextrema(df.iloc[i,:].values, np.greater_equal, order=15) ilocs_max.append(row_max_indices)
这里的np.greater_equal用来定义极值判断条件,order参数控制“局部”的范围——数值越大,筛选出的极值越“突出”,不会被小波动干扰。
3. 可视化验证结果
为了确认找到的局部最大值是否准确,可以绘制某几行的数据,并标记出极值点:
# 绘制第0行的原始数据 df.iloc[0,:].plot(figsize=(20,8)) # 绘制第3000行的原始数据 df.iloc[3000,:].plot(figsize=(20,8)) # 在第3000行上标记出局部最大值 # 注意:argrelextrema返回的是元组,取第一个元素就是索引数组 max_positions = ilocs_max[3000][0] df.iloc[3000, max_positions].plot(style='.', lw=10, color='red', marker="v")
我优化了原代码中索引的写法,直接用计算好的ilocs_max里的索引,这样能更准确地定位到局部最大值的位置。
内容的提问来源于stack exchange,提问作者ankitume
相关产品推荐
相关产品推荐

