Python逐元素计算当前前两高值,DataFrame新列仅返回循环最终结果
问题原因
你代码的核心问题是:循环中每次执行waves["max1"]=max1、waves["max2"]=max2时,是给整个DataFrame的max1、max2整列统一赋值为当前的max1、max2值,而非仅更新当前循环对应的那一行。每循环一次整列数据就会被整体覆盖一次,最终所有行自然只会保留循环结束后的全局前两高得分。
此外你代码里写的max1 = max1这类操作属于冗余代码,没有实际作用可以直接删除。
修复方案
你需要在遍历时同时获取行索引,仅给当前索引对应的行赋值即可,修改后的代码如下:
max1 = 0 max2 = 0 # 先初始化两列 waves["max1"] = 0 waves["max2"] = 0 # 带索引遍历DataFrame for idx, row in waves.iterrows(): high = row["Score"] if high > max1: max2 = max1 max1 = high elif max2 < high <= max1: max2 = high # 仅更新当前行的对应列值 waves.loc[idx, "max1"] = max1 waves.loc[idx, "max2"] = max2 print(waves)
扩展说明
如果数据量较大不想用循环,也可以用pandas的expanding滚动窗口实现,不过对新手来说上面的循环写法更易理解。
内容的提问来源于stack exchange,提问作者Barrizzle
相关产品推荐
相关产品推荐

