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

Python Pandas查找大于半最大值的首尾值索引实现方法

问题场景

现有250个数据文件,每个文件包含1000个构成高斯曲线的数值,需要查找每个序列中**大于最大值一半(HotM, Half of the Maximum)**的首个值、最后一个值对应的索引。目前所有文件已加载为DataFrame列表存储。

现存问题
  • 可通过maxValues = dataframes_temp[1].max()成功获取单组数据最大值,但使用index_value_min = (dataframes_temp[1] - b[i]).apply(abs).idxmin()仅能找到最接近HotM的首个值,该值不满足「大于HotM」的要求,不符合计算目标。
  • 尝试通过倒序DataFrame的方式查找最后一个符合要求的索引,代码如下:
    dataframes_temp = dataframes_list[1]
    dataframes_temp2 = dataframes_temp.loc[::-1]
    index_value_max = (dataframes_temp2[1] - b[i]).apply(abs).idxmin()
    
    该代码未生效,返回结果和正序查找首个接近值的结果完全一致,无法获取正确的末位索引。
实现方法

核心逻辑不需要做差值取绝对值找最近值,直接先做布尔筛选,保留所有严格大于HotM的记录,再直接取筛选结果的首尾索引即可。

单组数据实现示例

# 提取目标序列,此处以DataFrame中索引为1的列为例
target_series = dataframes_list[1][1]
# 计算当前序列的HotM
hotm_value = target_series.max() / 2
# 筛选所有值严格大于HotM的记录
valid_subset = target_series[target_series > hotm_value]
# 获取首个符合条件的索引
first_valid_idx = valid_subset.index[0]
# 获取最后一个符合条件的索引
last_valid_idx = valid_subset.index[-1]

批量处理250个文件的实现

batch_result = []
for df in dataframes_list:
    # 替换为实际存储高斯数值的列索引/列名
    s = df[1]
    # 若存在空值可先加.dropna():s = df[1].dropna()
    hotm = s.max() / 2
    valid_indexs = s[s > hotm].index
    batch_result.append({
        "first_idx": valid_indexs[0],
        "last_idx": valid_indexs[-1]
    })

之前倒序代码失效原因

倒序后依然使用「找与HotM差值最小的位置」逻辑,高斯曲线上最接近HotM的值本身位于上升沿靠近峰值的位置,无论正序还是倒序查找最近值,定位到的都是同一条数据的索引,自然返回结果和正序查找完全一致。

内容的提问来源于stack exchange,提问作者Jan Kodýtek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:39:42