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

使用for循环对比更新DataFrame后df1未变更的问题

df1通过for循环更新无预期变化的问题修复

问题根源

原代码存在几个关键问题导致df1未更新:

  • 仅给局部变量赋值,未将修改同步到df1的DataFrame中
  • 循环范围只覆盖df2前4行,遗漏第5行数据
  • 语法错误(括号不匹配、变量拼写错误)
  • 逻辑判断混乱(混淆了转换后的数字标识和目标文本值)
  • 重复执行拆分操作,效率低下

修正后的代码

# 提前拆分df2目标列,避免循环内重复操作
df2_split = df2['Unnamed: 4'].str.split('_', n=1, expand=True)

for i in range(len(df2)):
    # 获取当前df2行的KEY值
    index_key = df2['5. 방법/수단'][i]
    # 定位df1中对应KEY的行索引
    try:
        index_rawdata = df1.loc[df1['KEY'] == index_key].index[0]
    except IndexError:
        # 若df1中无对应KEY,跳过当前行
        continue
    
    # 获取df2拆分后的类型标识和药物详情
    method_type = df2_split.iloc[i, 0]
    drug_detail = df2_split.iloc[i, 1]
    
    # 将类型标识转换为数字,和df1的MAIN_METHOD匹配
    converted_type = int(method_type.replace('sleepingpill', '1').replace('others', '20'))
    
    # 匹配MAIN_METHOD后,更新df1的DRUG_ETCDTL
    if converted_type == df1.loc[index_rawdata, 'MAIN_METHOD']:
        df1.loc[index_rawdata, 'DRUG_ETCDTL'] = drug_detail

代码说明

  1. 提前拆分df2:将拆分操作放在循环外,避免重复计算提升效率,且未修改原df2
  2. 循环范围覆盖全部df2行:用len(df2)确保遍历所有数据
  3. 异常处理:添加try-except避免df1中无对应KEY时抛出错误
  4. 直接修改df1:通过df1.loc[index_rawdata, 'DRUG_ETCDTL']直接更新DataFrame的对应单元格,确保修改生效
  5. 逻辑修正:先转换类型标识为数字,和df1的MAIN_METHOD匹配后,将药物详情写入DRUG_ETCDTL

运行上述代码后,df1会更新为预期结果:

KEY  MAIN_METHOD     DRUG_ETCDTL
0  100944            1         unknown
1   67488           20         unknown
2  101476           20        anorexia
3  102549            1  plunitrazeparm
4  103227            1  pentobarbytal

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:55:20