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

Python pandas中如何基于关联DataFrame匹配列值填充目标列

跨表匹配填充年龄的实现方法

之前尝试的筛选条件df['Name Kids'] != np.nan完全失效:pandas中NaN的特性是和任何值(包括自身)做相等/不等比较时都会返回False,根本无法筛出非空的有效姓名行,自然没法完成匹配。

核心实现逻辑

建立df1中儿童姓名到对应年龄的映射关系,逐行匹配df里的儿童姓名,把对应年龄填充到年龄列即可,全程不会引入df1里的额外儿童数据,也会自动保留df原本的空值行不做处理。

完整可运行代码

import pandas as pd
import numpy as np

# 构造题目给定的原始DataFrame
data = {'Name Kids':  ['Valentina', 'Mark', 'Sofia', np.nan, 'Manny', 'Alex', 'Claire', np.nan, np.nan],
        'Age Kids': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]
        }
df = pd.DataFrame(data, columns = ['Name Kids','Age Kids'])

data1 = {'Children Names':  ['Eloise', 'Valentina', 'Brian', 'Daphne', 'Mark', 'Sofia', 'Betty', 'Manny', 'Ronnie', 'Alex', 'Claire'],
        'Children Ages': [17, 13, 11, 7, 12, 3, 16, 10, 1, 5, 14]
        }
df1 = pd.DataFrame(data1, columns = ['Children Names', 'Children Ages'])

# 1. 从df1生成姓名-年龄的映射字典
name_age_map = df1.set_index('Children Names')['Children Ages'].to_dict()
# 2. 逐行匹配df的姓名列,填充对应年龄
df['Age Kids'] = df['Name Kids'].map(name_age_map)

代码执行后的输出

和题目要求的最终结果完全一致:

Name Kids  Age Kids
0  Valentina      13.0
1       Mark      12.0
2      Sofia       3.0
3        NaN       NaN
4      Manny      10.0
5       Alex       5.0
6     Claire      14.0
7        NaN       NaN
8        NaN       NaN

逻辑匹配说明

  • map方法会逐行读取df中Name Kids列的值,到映射字典中查找对应年龄,找不到匹配项的行(比如本身姓名为NaN的空行)会自动赋值为NaN,完全符合“不处理原有空值、不引入df1额外儿童数据”的要求
  • 不需要额外写筛选非空行的判断逻辑,map方法会自动处理姓名为NaN的场景,不会报错

内容的提问来源于stack exchange,提问作者Elisa L.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 07:15:03