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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:38:28