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

如何遍历pandas DataFrame 基于另一表匹配值填充缺失值

问题背景

需要基于Route字段的匹配关系,用全量有效DataFrame df 中的Fares值,填充子集DataFrame df1 中Fares列的NaN缺失值,两个表结构如下:
全量表df:

Sr. NoFaresRoute
1123ABE-PGD-ABE
2456ABQ-SLC-ABQ
3789ALB-SJU-ALB

待填充表df1:

Sr. NoFaresRoute
130NaNABE-PGD-ABE
297NaNABQ-SLC-ABQ
345NaNALB-SJU-ALB
原代码错误点
  • 循环逻辑无效:for i in df_1 直接遍历DataFrame对象时,只会返回列名,无法实现逐行匹配的效果
  • 列名引用错误:代码中df[Fare]未给列名加引号,pandas会将Fare识别为未定义变量抛出报错,且实际列名为Fares,和代码中写的Fare不匹配
  • 映射逻辑完全偏离需求:map({'Nan': ''})的作用是将值等于字符串'Nan'的内容替换为空字符串,既没有匹配pandas真实的空值类型np.nan,也没有关联Route字段做跨表值匹配,完全无法实现填充目标
  • 操作对象错误:需求是填充df1中的Fares空值,原代码反而在修改df的列,操作方向完全错误
正确实现方案

不需要写显式for循环,pandas内置的映射、填充函数可以直接实现需求,执行效率更高。

方法1:映射字典填充(推荐)

先提取df中Route和Fares的对应关系为字典,再基于Route列做映射,用映射结果填充空值即可:

# 构造Route到Fares值的映射字典
fare_map = df.set_index('Route')['Fares'].to_dict()
# 匹配映射值填充空值
df1['Fares'] = df1['Fares'].fillna(df1['Route'].map(fare_map))

由于df1是df的子集,所有Route值都能在df中找到对应Fares值,执行后df1的Fares列空值会全部填充完成。

方法2:表合并回填

如果更习惯用表关联的逻辑,也可以通过左连接把df的Fares值关联到df1后回填,效果完全一致:

# 关联匹配到参考Fares值
df1 = df1.merge(
    df[['Route', 'Fares']], 
    on='Route', 
    how='left', 
    suffixes=('', '_ref')
)
# 用参考值填充空值后删除临时列
df1['Fares'] = df1['Fares'].fillna(df1['Fares_ref'])
df1 = df1.drop(columns='Fares_ref')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:45:37