Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
试题:如何对 DataFrame 进行数据合并?
(难度:medium)
分析
在 Pandas 中通过merge()函数进行高效的合并操作,与关系型数据库的SQL中MERGE语句用法类似。
语法格式如下:
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True)
在这里,我们使用了以下参数 -
left/right:两个要合并的 DataFrame 对象。on:用于连接的键(列名),该键必须同时存在于左右两个 DataFrame 中,如果没有指定,并且其他参数也未指定,那么将会以两个 DataFrame 的列名交集做为连接键。left_on:左侧 DataFrame 中作连接键的列名,该参数在左、右列标签名不相同,但表达的含义相同时使用。right_on:右侧 DataFrame 中作连接键的列名。left_index:如果为True,则使用左侧 DataFrame 中的行索引作为其连接键。如果DataFrame 具有MultiIndex(层次结构),则级别数必须与右边DataFrame中的连接键数相匹配。right_index:如果为True,则使用右侧 DataFrame 中的行索引作为其连接键。how:合并类型,有'left', 'right', 'outer', 'inner'四种,分别代表左连接,右连接、外连接、内连接,默认为'inner'内连接。可以确定 DataFrame 中包含的键,如果组合键没有出现在左侧或右侧 DataFrame 中,则连接表中的值将为NAN。sort:默认为True,按照字典顺序通过连接键对结果DataFrame进行排序,设置为False会在很多情况下大大提高性能。
具体使用如下,创建两个不同的 DataFrame 并对其执行合并操作:
import pandas as pd
left = pd.DataFrame({
'stu_no':[1,2,3,4,5],
'name': ['Zhangyi', 'Zhanger', 'Zhangsan', 'Zhangsi', 'Zhangwu'],
'math_score':[90,87,76,60,68]})
right = pd.DataFrame({
'stu_no':[1,2,3,4,5,6],
'name': ['Zhangyi', 'Zhanger', 'Zhangsan', 'Zhangsi', 'Zhangwu', 'Zhangliu'],
'english_score':[88,85,65,91,65,78]})
print(left)
print(right)
输出如下:
stu_no name math_score
0 1 Zhangyi 90
1 2 Zhanger 87
2 3 Zhangsan 76
3 4 Zhangsi 60
4 5 Zhangwu 68
stu_no name english_score
0 1 Zhangyi 88
1 2 Zhanger 85
2 3 Zhangsan 65
3 4 Zhangsi 91
4 5 Zhangwu 65
5 6 Zhangliu 78
使用stu_no作为连接键,对上述 DataFrame 进行合并操作:
merge_pd = pd.merge(left, right, on='stu_no')
merge_pd
结果输出如下:
stu_no | name_x | math_score | name_y | english_score |
| - | ------ | -------- | ---------- | -------- | ------------- |
| 0 | 1 | Zhangyi | 90 | Zhangyi | 88 |
| 1 | 2 | Zhanger | 87 | Zhanger | 85 |
| 2 | 3 | Zhangsan | 76 | Zhangsan | 65 |
| 3 | 4 | Zhangsi | 60 | Zhangsi | 91 |
| 4 | 5 | Zhangwu | 68 | Zhangwu | 65 |
原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~
最后,感谢女朋友在工作和生活中的包容、理解与支持 !