Python中如何匹配DataFrame行号与列值 解决索引越界问题
报错原因
local_max仅包含1032个元素,你的循环逻辑中用行号i直接作为下标取local_max[i],当i大于等于1032时就会触发索引越界错误。同时你的判断逻辑本身也不符合需求:你要匹配的是「行号是否在local_max列表内」,而非「行号等于local_max对应下标的值」。
向量化实现方案(推荐)
用numpy+pandas的向量化操作实现,时间复杂度低,无需循环:
import numpy as np # 初始化全为0的等长数组 max_array = np.zeros(len(df), dtype=df.x.dtype) # 给local_max指定的行位置赋值对应df.x的值 max_array[local_max] = df.x.loc[local_max].to_numpy()
如果需要输出Python列表格式,末尾添加max_array = max_array.tolist()即可。
原循环写法修复(非推荐,性能较差)
如果要保留循环写法,需要调整判断逻辑,同时把local_max转成集合提升存在判断的效率:
max_array = [] local_max_set = set(local_max) for i in range(len(df)): max_array.append(df.x[i] if i in local_max_set else 0)
内容的提问来源于stack exchange,提问作者stanvooz
相关产品推荐
相关产品推荐

