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

非整数索引的pandas Series中如何查找符合阈值的峰值及对应原索引

问题原因

scipy的find_peaks接口返回的是输入序列的整数位置下标,和你传入的pandas Series的自定义索引无关,你得到的array([ 1, 16], dtype=int64)是峰值在计数Series里的顺序位置,不是原索引值。

调整方案

你只需要把返回的位置下标映射到原计数Series的index上即可,优化后代码如下:

import pandas as pd
from scipy.signal import find_peaks
import matplotlib.pyplot as plt

thresh = 100
# 预先保存计数结果,避免重复执行value_counts
count_series = out.value_counts(sort=False)
# 获取峰值的顺序位置
peak_pos, _ = find_peaks(count_series, height=thresh)
# 映射得到原索引的峰值位置
peak_original_idx = count_series.index[peak_pos]
# 获取对应峰值
peak_values = count_series.iloc[peak_pos]

# 绘图逻辑
plt.plot(peak_original_idx, peak_values, 'r.')
count_series.plot.bar()
plt.show()

# 输出预期结果
print(peak_original_idx.tolist())
print(peak_values.tolist())

运行后输出结果为:

[1.0, 8.5]
[279, 139]
补充说明

你之前的绘图代码已经用到了原索引映射的逻辑,只是最后直接打印了find_peaks返回的位置下标,才会得到不符合预期的整数结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:21:01