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.
相关产品推荐
相关产品推荐

