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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:36:03