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

如何更新Pandas dataframe,按Object对应关系替换Field列的NaN值

高效实现方案

完全不需要逐行遍历,用Pandas自带的向量化操作即可,性能比遍历高1~2个数量级,适合任意体量的数据集。

实现逻辑

  1. 先基于Field非空的行构造映射字典:key为Field的取值,value为该行对应的Object取值
  2. 对Field为空的行,用该行的Object值去上述映射字典匹配,匹配成功则替换Field的值,匹配失败保留NaN

代码实现

import pandas as pd
import numpy as np

# 构造映射字典,相同Field默认保留最后一次出现的Object,可调整keep参数修改规则
field_map = df.dropna(subset=['Field'])\
              .drop_duplicates(subset=['Field'], keep='last')\
              .set_index('Field')['Object']\
              .to_dict()

# 替换NaN的Field值
df.loc[df['Field'].isna(), 'Field'] = df.loc[df['Field'].isna(), 'Object'].map(field_map)

# 如果需要删除替换后Field仍为NaN的行(匹配示例输出去掉tablet行的效果),可加下面这行
# df = df[~(df['Field'].isna() & df['Object'].map(field_map).isna())]

逻辑验证

对给出的示例数据,构造的field_map为:

{'Christmas': 'house', 'house': 'table', 'table': 'chair', 'bottle': 'house'}
  • Field为空的Christmas行,Object值为Christmas,匹配到对应value为house,替换成功
  • Field为空的bottle行,Object值为bottle,匹配到对应value为house,替换成功
  • Field为空的tablet、oven行无匹配,保留NaN,完全符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:51:01