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

pandas根据另一DataFrame的匹配值更新目标列值

问题场景
  • 存在两个pandas DataFrame对象df1、df2,二者均包含Weight in lb(体重,单位:磅)列
  • 核心需求:当两个表的Weight in lb取值匹配时,将df2中对应的BMI值更新到df1的BMI列;因原表结构复杂,禁止使用merge类合并操作
  • 样例数据结构:
    • df1包含6个字段:索引、First Name、Age、Gender、Weight in lb、BMI,初始状态下BMI列全为空值
    • df2包含3个字段:Weight in lb、BMI、Height,存储不同体重对应的BMI参考值
  • 待修复的失败代码:
df1['BMI'] = df2.loc[df2['Weight in lb'].isin(df1['Weight in lb'],'BMI']
  • 预期输出规则:匹配到对应体重的行正确填充BMI值(如体重167对应BMI17.3、175对应19.6、169对应17.9),未匹配到的体重(如132)对应的BMI保留空值
错误原因
  1. 语法层面:代码存在括号、引号不闭合问题,loc索引的语法书写错误,无法正常运行
  2. 逻辑层面:isin方法仅判断值是否存在,无法实现两个表按体重值一一对应匹配的效果,直接赋值会因索引不对齐导致值错位
修复方案

使用map方法实现键值对映射填充,无需合并表,不会修改原表结构和行顺序,未匹配到的值默认保留空值,完全适配需求:

# 从df2构建「体重值:BMI值」的映射字典
bmi_mapping = df2.set_index('Weight in lb')['BMI'].to_dict()
# 按体重列映射填充BMI
df1['BMI'] = df1['Weight in lb'].map(bmi_mapping)

执行后校验结果:体重167、175、169的行分别正确填充17.3、19.6、17.9,体重132等未在df2中存在的行BMI仍为空值,和预期效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:45:56