如何用Pandas基于单列映射替换值并丢弃无匹配条目?
Pandas实现DataFrame值映射并过滤不存在项
首先给出原始数据:
import pandas as pd mapping = pd.DataFrame({'idx': ['a','b','c'], 'val': [1, 2, 3]}) obs = pd.DataFrame({'obs': ['a','c','a','a','b','d']})
需求:将obs中存在于mapping['idx']的观测值替换为mapping['val']对应值,丢弃不存在的观测值,最终得到目标DataFrame:
obs_mapped = pd.DataFrame({'obs': [1,3,1,1,2]})
方法一:字典映射+过滤空值
这是最简洁的实现方式,先将mapping转换为键值对字典,再用map完成值映射,最后过滤掉不存在项对应的空值:
# 构建映射字典 map_dict = mapping.set_index('idx')['val'].to_dict() # 映射并过滤空值,转成目标DataFrame obs_mapped = obs['obs'].map(map_dict).dropna().reset_index(drop=True).to_frame()
方法二:Merge关联过滤
如果更习惯用表关联的逻辑,可以通过merge完成匹配,直观实现映射和过滤:
obs_mapped = obs.merge(mapping, left_on='obs', right_on='idx', how='left')\ .dropna(subset=['val'])\ .rename(columns={'val': 'obs'})\ [['obs']]\ .reset_index(drop=True)
两种方法最终都能得到目标结果,执行后输出:
obs 0 1 1 3 2 1 3 1 4 2
内容的提问来源于stack exchange,提问作者TylerD
相关产品推荐
相关产品推荐

