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

Python条件语句:为DataFrame新增不在Filtro_dia中的cuenta行

问题描述

我是Python新手,现有一段处理DataFrame的代码,需求如下:当bd_día中的"cuenta"不在Filtro_dia的"Cuenta"列表中时,需添加包含该"cuenta"及对应新值的新行。现有代码如下:

lista_datos = []
for i in range(bd_dia.shape[0]):
  # print(i)
  if list(bd_dia["cuenta"])[i] in list(Filtro_dia["Cuenta"]):
    lista_datos.append(Filtro_dia.iloc[i])
    lista_datos[i][7] = bd_dia["ValorTotal"].iloc[i]
  else:
    if list(bd_dia["cuenta"])[i] not in list(Filtro_dia["Cuenta"]):
      nueva_fila = 

  break;
完善后的代码及逻辑

原代码存在几个明显问题:break会直接终止循环,只能处理第一行;频繁转列表按索引取值效率低;修改视图数据可能引发警告。以下是修复并优化后的代码:

import pandas as pd

lista_datos = []
# 将Filtro_dia的Cuenta列转为集合,大幅提升查找效率
cuentas_filtro = set(Filtro_dia["Cuenta"])

# 遍历bd_dia的每一行
for idx, row in bd_dia.iterrows():
    cuenta_actual = row["cuenta"]
    valor_total = row["ValorTotal"]
    
    if cuenta_actual in cuentas_filtro:
        # 找到匹配的行,复制后修改第8列(索引7)的ValorTotal值
        fila_coincidente = Filtro_dia[Filtro_dia["Cuenta"] == cuenta_actual].iloc[0].copy()
        fila_coincidente.iloc[7] = valor_total
        lista_datos.append(fila_coincidente)
    else:
        # 构造新行:沿用Filtro_dia的列结构,填充cuenta和对应ValorTotal
        nueva_fila = pd.Series(index=Filtro_dia.columns)
        nueva_fila["Cuenta"] = cuenta_actual
        nueva_fila.iloc[7] = valor_total
        # 若其他列需要默认值,可添加此行:nueva_fila.fillna(0, inplace=True)
        lista_datos.append(nueva_fila)

# 可选:将结果列表转为DataFrame
resultado_final = pd.DataFrame(lista_datos)

核心优化点

  • 高效查找:用集合存储目标账号,查找时间复杂度从O(n)降至O(1),数据量大时优势明显
  • 安全修改:复制匹配行后再修改,避免误改原Filtro_dia的数据
  • 简洁遍历:用iterrows()直接获取每行数据,无需手动索引取值
  • 结构一致:新行沿用Filtro_dia的列结构,保证最终结果的列规范统一

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:12:34