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

Python中删除行后,如何重置for循环的迭代变量i?

解决迭代中删除行后重新从第1行遍历的问题

原代码的外层for循环基于初始DataFrame的行枚举,当你在循环内部删除行并重置索引后,循环不会自动从头遍历新的DataFrame。要实现删除行后重启遍历的需求,推荐使用while循环手动控制索引,具体修改如下:

修改后的代码

i = 0
while i < len(Proyectonevera2):
    if Proyectonevera2.loc[i,'Clave'] == "P":
        CodIng = Proyectonevera2.loc[i,'Ingrediente']
        NuevoInv_Ing = Proyectonevera2.loc[i,'Nuevo Inventario']
    
    if (Proyectonevera2.loc[i,'Clave'] == "N" and Proyectonevera2.loc[i,'Ingrediente'] == CodIng):
        Proyectonevera2.loc[i,'Inv_Ing'] = NuevoInv_Ing
        if Proyectonevera2.loc[i,'Cant Ingr SUM'] != 0 and Proyectonevera2.loc[i,'Cant Prod SUM'] != 0:
            # 注意:原代码中此处的j为未定义变量,推测是笔误,已改为i
            Proyectonevera2.loc[i,'Cantidad producir'] = Proyectonevera2.loc[i,'Inv_Ing'] * Proyectonevera2.loc[i,'Cant Prod SUM'] / Proyectonevera2.loc[i,'Cant Ingr SUM']
            dfc = Proyectonevera2.groupby('CodProducto')['Cantidad producir']
            # assign返回新DataFrame,必须重新赋值才能保留修改
            Proyectonevera2 = Proyectonevera2.assign(min=dfc.transform(min))
            Proyectonevera2.loc[i,'Consumo Agosto'] = Proyectonevera2.loc[i,'min'] * Proyectonevera2.loc[i,'Cant Ingr SUM'] / Proyectonevera2.loc[i,'Cant Prod SUM']
            Proyectonevera2.loc[i,'Nuevo Inventario'] = Proyectonevera2.loc[i,'Inv_Ing'] - Proyectonevera2.loc[i,'Consumo Agosto']
            bdnevera = Proyectonevera2[Proyectonevera2['Clave']=="P"]
            nevera.append(bdnevera) 
            Proyectonevera2 = Proyectonevera2.drop(Proyectonevera2[Proyectonevera2['Clave']=="P"].index)
            Proyectonevera2 = Proyectonevera2.reset_index(drop=True)
            # 重置索引指针,让循环从头开始
            i = 0
            continue  # 跳过当前循环剩余步骤,直接启动下一轮遍历
        
        # 批量修改相同CodProducto的Clave为"P"
        Codprod = Proyectonevera2.loc[1,'CodProducto']
        for j in range(len(Proyectonevera2)):
            if Proyectonevera2.loc[j,'CodProducto'] == Codprod:
                Proyectonevera2.loc[j,'Clave'] = "P"
    
    i += 1

关键修改说明

  1. 替换循环类型:用while循环替代for enumerate,手动控制遍历索引i,这样可以在需要时重置索引指针。
  2. 重启遍历逻辑:删除行并重置DataFrame索引后,将i设为0,并用continue跳过当前循环的剩余代码,直接从头开始遍历新的DataFrame。
  3. 修复语法错误:
    • 原代码中assign方法未赋值回原DataFrame,导致新增的min列不会生效,现已修正。
    • 原代码中Cantidad producir计算时使用了未定义的j变量,推测是笔误,已改为当前行索引i。
  4. 避免索引越界:while循环的条件i < len(Proyectonevera2)确保遍历不会超出DataFrame的当前行数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:03:40