如何基于条件从pandas DataFrame取数写入另一DataFrame(实现VLOOKUP功能)
pandas实现Excel VLOOKUP功能的操作方法
我们可以通过两种常用方式实现按ID匹配、把DF1的列值补充到DF2的需求,和Excel VLOOKUP逻辑完全对齐:
方法1:merge方法(适合多列匹配场景)
这是最通用的方案,可一次性将DF1的多个匹配列合并到DF2中。
示例代码
import pandas as pd # 示例DF1:匹配数据源,包含ID和待提取的其他列 DF1 = pd.DataFrame({ 'ID': [1,2,3,4,5], '姓名': ['张三','李四','王五','赵六','钱七'], '部门': ['技术部','产品部','运营部','销售部','人事部'] }) # 示例DF2:待填充的目标表 DF2 = pd.DataFrame({ 'ID': [2,3,5,6,7], '考勤天数': [22,21,23,19,20] }) # 核心匹配逻辑 result = pd.merge( left=DF2, right=DF1, on='ID', # 两个表的匹配公共列,列名不同时可分别指定left_on、right_on how='left' # 保留DF2的所有行,匹配不到的字段填充NaN,和VLOOKUP默认逻辑一致 )
常用调整项
- 若只保留两个表ID完全匹配的行,将
how='left'改为how='inner' - 若DF1存在重复ID,可先对DF1去重后再匹配,保证和VLOOKUP仅返回第一个匹配结果的逻辑一致:
DF1_unique = DF1.drop_duplicates('ID', keep='first') result = pd.merge(DF2, DF1_unique, on='ID', how='left') - 匹配完成后可通过
fillna方法替换缺失值:# 将NaN替换为空字符串 result = result.fillna('')
方法2:map方法(适合单列提取场景)
如果只需要从DF1提取单个列到DF2,用map方法更轻量便捷:
# 构造ID到目标字段的映射关系 id_to_dept = DF1.set_index('ID')['部门'] # 映射到DF2的新列 DF2['部门'] = DF2['ID'].map(id_to_dept)
内容的提问来源于stack exchange,提问作者lolman
相关产品推荐
相关产品推荐

