Merge

2020-12-19  本文已影响0人  Noza_ea8f

这个Merge函数功能比较强大;
如果我有两个表;
这两个表之间存在关联;
通过关联的键生成一个新的表;
比如有这样两个表:
一个表包含教师ID,每个教师ID都对应多门课程;
另一个表包含课程与班级的对应关系,就是每门课程与哪些班级对应(因为一门课程可以有多个班来上);
那么我要知道每个教师都需要给哪些班级上课,就可以用Merge这个函数了;
观察两个表,它们之间的键是课程,通过课程就可以找到教师与班级的对应关系了;

教师表:


图片.png

教师授课表:


图片.png
代码:
import pandas as pd

path = 'data/Merge函数.xlsx'
# 读取教师表
df_teachers = pd.read_excel(path, sheet_name='教师表')
# 读取教师授课表
df_courses = pd.read_excel(path, sheet_name='教师授课表')

# 通过两个表里的USER_ID来为每门课程添加教师姓名
df_teachers_and_courses = pd.merge(df_teachers, df_courses, left_on='USER_ID', right_on='USER_ID', how='inner')

print(df_teachers_and_courses)

输出:

    USER_ID  姓名    科目
0         1  张三   科目1
1         1  张三   科目2
2         2  李四   科目3
3         2  李四   科目4
4         2  李四   科目5
5         3  王五   科目6
6         4  刘六   科目7
7         4  刘六   科目8
8         4  刘六   科目9
9         5  贾七  科目10
10        5  贾七  科目11

参数"inner"是内连接,就是说如果存在就匹配过来,不存在就舍弃;
让我对数据做个修改,再看一下就清楚了;


图片.png

新增一个叫“周八”的教师;


图片.png
这边科目对应的USER_ID在“教师表”中是没有的,让我再运行一下刚才的程序:
    USER_ID  姓名    科目
0         1  张三   科目1
1         1  张三   科目2
2         2  李四   科目3
3         2  李四   科目4
4         2  李四   科目5
5         3  王五   科目6
6         4  刘六   科目7
7         4  刘六   科目8
8         4  刘六   科目9
9         5  贾七  科目10
10        5  贾七  科目11

可以看到结果还是一样的;
如果我把参数"inner"改为“outer",再次运行程序:

    USER_ID   姓名    科目
0         1   张三   科目1
1         1   张三   科目2
2         2   李四   科目3
3         2   李四   科目4
4         2   李四   科目5
5         3   王五   科目6
6         4   刘六   科目7
7         4   刘六   科目8
8         4   刘六   科目9
9         5   贾七  科目10
10        5   贾七  科目11
11        6   周八   NaN
12        7  NaN  科目12
13        7  NaN  科目13

这样,所有数据都被提取出来了;
没有匹配到的用”NaN“表示;
这个功能是非常强大也经常使用的;
类似于Excel里面的VLOOKUP函数,但是要强大得多,我们可以对N张表格进行遍历匹配,无论是效率还是方便程度,在大数据量和多张表格时都是都是VLOOKUP函数无法发相比的;

上一篇 下一篇

猜你喜欢

热点阅读