基于Pandas映射填充数据集缺失的region字段
问题描述
现有两个数据集:
df_1前4行数据:
region postal_code Adrar 1000 Broko 5633 Conan 4288 Cymus 7435
df_2前4行数据:
Name Charges region postal_code Revenue Lia HG Pintol 4522 345 Joss PX Inend 7455 142 Amph CT 5633 148 Andrew UY Liven 9033 147
需要填充df_2中缺失的region字段,规则是通过postal_code匹配df_1中的对应region值(例如df_2第三行postal_code为5633,对应df_1的region为Broko)。
解决方案
方法1:使用map函数(高效简洁)
先将df_1转换为postal_code到region的映射字典,再用该字典填充df_2的缺失值,仅覆盖region字段的空值,保留已有有效数据:
import pandas as pd # 构建postal_code与region的映射字典 postal_region_map = df_1.set_index('postal_code')['region'].to_dict() # 填充df_2中缺失的region df_2['region'] = df_2['region'].fillna(df_2['postal_code'].map(postal_region_map))
方法2:使用merge合并填充
通过左连接合并两个数据集,提取匹配到的region值填充原数据,适合需要查看匹配关系的场景:
import pandas as pd # 左连接df_2和df_1,基于postal_code,添加后缀区分重复列 merged_data = df_2.merge(df_1, on='postal_code', how='left', suffixes=('', '_df1')) # 用df_1的region填充df_2的缺失值 df_2['region'] = df_2['region'].fillna(merged_data['region_df1']) # 可选:清理临时合并生成的列 merged_data.drop('region_df1', axis=1, inplace=True)
内容的提问来源于stack exchange,提问作者Patrik
相关产品推荐
相关产品推荐

