解决一个问题:关联AB两张表,以特定列
作为关联基准,将B表中的数据关联进A表中
问题描述
表一:
![](https://i-blog.csdnimg.cn/blog_migrate/f4225bdf3fb8d0a85ddcdabd5b0504f3.png)
表二:
![](https://i-blog.csdnimg.cn/blog_migrate/299cbd43a9e4bf55f9d12561f79b0052.png)
可以看到两张表都存在可作为
关联基准列
的
姓名
,想要把表2中
爱好
、
年龄
列从表1中根据
姓名
列匹配出来
解决方法一:Excel函数Vlookup
插入函数:VLOOKUP(参数1,参数2,参数3,参数4)
VLOOKUP函数有4个参数,具体含义如下:
参数1:目标表的关联列(本文示例中sheet2中 A列为关联列)
参数2:根据关联表的哪个区域匹配 (本文示例中sheet1 中 A2:B10 为关联区域)
参数3:需要匹配查找区域的第几列。(本文示例中年龄列为匹配区域的第二列)
参数4:查找模式,即是要精确查找还是要模糊查找,精确查找:False或0,模糊查找:True或1 (本文示例使用精确查找,0)
我这里使用WPS,公式-查找与引用-VLOOKUP
![](https://i-blog.csdnimg.cn/blog_migrate/dd69e7822db2be24a974e6d250fc3080.png)
在对应区域使用VLOOKUP函数
![](https://i-blog.csdnimg.cn/blog_migrate/77d1f7eb5c6afc6b1cc88d9d68c2d320.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0195bf02f04e906c87664e2867f9aea6.png)
批量匹配的时候只需要选中当前列的区域,然后把公式复制即可,表格会自动递增更新参数1的值
另外,用
IFERROR
函数可以控制匹配返回值
=IFERROR(VLOOKUP(B1,sheet1!$A:$C,3,0),"")
判断VLOOKUP执行后,如果匹配到值则正常返回,如果没匹配到,则返回空(即公式的"")
解决方法二:Python函数Pandas
表一:
![](https://i-blog.csdnimg.cn/blog_migrate/8ab4d38694859fa755aecc62dba359ba.png)
表二:
![](https://i-blog.csdnimg.cn/blog_migrate/ec68f44e4f35f2e9d2c300c2e4f34a1f.png)
最后效果:
![](https://i-blog.csdnimg.cn/blog_migrate/dad06b86b42d9df86ee4defa4b4a119f.png)
其中Sheet2数据比Sheet1数据多一条,我们要实现的目标是把Sheet1中人员对应的年龄放到Sheet2对应的人员上,如果人员在Sheet1中不存在,则不用处理。
使用
Pandas
函数实现
#!/usr/bin/env python3
# _*_ coding: utf-8 _*_
import pandas as pd
df1 = pd.read_excel("/Users/daren/Downloads/1.xlsx", sheet_name=0)
df2 = pd.read_excel("/Users/daren/Downloads/1.xlsx", sheet_name=1)
c = df1.merge(df2, on="Name", how="right")
# c=pd.merge(a,b,how='right')
# print(c.head())
c.to_excel('3.xlsx', sheet_name='result')
代码解释:
- 第5行:引入
pandas library
- 第7-8行:使用
pandas.read_excel
方法导入excel表格的两个Sheet页面,作为dataframe对象。 - 第10行:执行
merge
操作,也就是实现VLookup函数的地方。
基于共有的“Name”列merge df1和df2,生成一个新的dataframe,然后生成excel。c = df1.merge(df2, on=”Name”, how=”left”)
其中df1作为left dataframe,df2作为right dataframe。
how有4中选择生成新的dataframe:
- left,以左侧表格共享列为基准
- right,以右侧表格共享列为基准
- inner,以两侧共有表格共享列为基准(取交集)
- outer,取两侧表格共享列最大区间为基准(取并集)
参考https://www.cnblogs.com/yaoze2018/p/12578352.htmlhttp://jianlei.github.io/archives/651663e0.html