Pandas数据分析面试基础题(十)

384 阅读2分钟

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            |

原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~

最后,感谢女朋友在工作和生活中的包容、理解与支持 !