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

如何在pandas dataframe迭代时跳过行,正确计算教练更替胜率变化

问题原因

  1. 循环逻辑错误:你在if判断的执行块里加了一次i = i + 1,循环末尾又加了一次,触发教练不同的判断时,i会直接加2跳过下一行的校验,逻辑完全混乱。
  2. 链式索引问题:celtics["Change in W/L%"].loc[i]这种写法属于链式索引,pandas会返回副本而不是原DataFrame的视图,赋值操作经常无法作用到原数据,甚至会意外覆盖其他行的值,这就是教练相同的行也被写入差值的核心原因。
  3. 额外说明:用while循环遍历pandas行本身效率极低,处理稍大的数据量时性能会非常差。

修复方案

临时修复原有循环

删掉if块里多余的i递增,同时修改.loc的写法避免链式索引:

i = 0
while i < len(celtics) - 1:
    curr_coach = celtics.loc[i, "Coaches"].split("(")[0]
    next_coach = celtics.loc[i+1, "Coaches"].split("(")[0]
    if curr_coach != next_coach:
        celtics.loc[i, "Change in W/L%"] = celtics.loc[i, "W/L%"] - celtics.loc[i+1, "W/L%"]
    i += 1

推荐使用pandas向量化操作

完全不需要写循环,用内置函数实现,性能更高、逻辑更清晰、不会出现索引错误:

# 提取所有行的教练姓名(去掉括号后内容)
coach_names = celtics["Coaches"].str.split("(").str[0]
# 生成和下一行教练不同的行的布尔掩码
coach_changed_mask = coach_names != coach_names.shift(-1)
# 仅对符合条件的行赋值胜率差值
celtics.loc[coach_changed_mask, "Change in W/L%"] = celtics["W/L%"] - celtics["W/L%"].shift(-1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:48:02