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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:17:47