Python Pandas数据合并pd.merge用法详解

  • Post category:Python

Python Pandas数据合并pd.merge用法详解

前言

在数据处理中,我们通常需要合并不同数据源中的数据。比如多个表格中有相同的列,我们希望把它们合并到一起。此时,我们可以使用Pandas库的merge函数来完成数据合并操作。

本文主要介绍Pandas库中merge函数的使用方法,以及常见的一些应用场景。

merge函数基础

merge函数是Pandas库中用于数据合并的重要函数。它可以将两个数据框(DataFrame)按照某些键(key)进行连接操作,形成一个新的数据框。其中,键是指用于连接两个数据框的列(column),也称为连接键(join key)。

merge函数的基本语法如下:

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)

参数说明:

  • left:左侧数据框
  • right:右侧数据框
  • how:连接方式,可选’left’, ‘right’, ‘outer’, ‘inner’,默认为’inner’
  • on:连接键,必须存在于左侧和右侧数据框中,并且类型必须相同,如果未指定,则将自动寻找连接键
  • left_on:左侧数据框中的连接键
  • right_on:右侧数据框中的连接键
  • left_index:使用左侧数据框中的索引作为连接键
  • right_index:使用右侧数据框中的索引作为连接键
  • sort:按照连接键排序,默认为False
  • suffixes:如果左侧和右侧数据框中存在相同列名,则为它们在新数据框中添加后缀
  • indicator:在新数据框中添加一列,用于记录每行数据是哪个数据框中的
  • validate:检查连接类型,可选None, ‘one_to_one’, ‘one_to_many’, ‘many_to_one’, ‘many_to_many’

merge函数使用示例

接下来我们通过两个示例来说明merge函数的使用。

示例一

假设我们有两个数据框,一个是销售数据,包含销售日期、销售人员、销售金额三列,另一个是员工数据,包含员工编号、员工姓名、员工性别三列。现在我们需要把这两个数据框按照销售人员连接起来,并计算每个员工的总销售金额。

首先,我们创建销售数据和员工数据:

import pandas as pd

sales_data = pd.DataFrame({
    'date':['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-05', '2022-01-06', '2022-01-07'],
    'salesman':['Tom', 'Jerry', 'Tom', 'Jerry', 'Tom', 'Jerry', 'Tom'],
    'amount':[100, 200, 150, 250, 120, 190, 180]
})

employee_data = pd.DataFrame({
    'id':[1, 2, 3],
    'name':['Tom', 'Jerry', 'Mickey'],
    'sex':['M', 'M', 'F']
})

这两个数据框的结构如下:

>>> sales_data
         date salesman  amount
0  2022-01-01      Tom     100
1  2022-01-02    Jerry     200
2  2022-01-03      Tom     150
3  2022-01-04    Jerry     250
4  2022-01-05      Tom     120
5  2022-01-06    Jerry     190
6  2022-01-07      Tom     180

>>> employee_data
   id    name sex
0   1     Tom   M
1   2   Jerry   M
2   3  Mickey   F

接下来,我们调用merge函数,按照销售人员连接两个数据框,并计算每个员工的总销售金额:

result = pd.merge(sales_data, employee_data, left_on='salesman', right_on='name')
result = result.groupby(['id', 'name']).agg({'amount': 'sum', 'sex': 'first'}).reset_index()

其中,left_on表示左侧数据框中的连接键为’salesman’,right_on表示右侧数据框中的连接键为’name’。

合并后的结果如下:

>>> result
   id    name  amount sex
0   1     Tom     550   M
1   2   Jerry     640   M

示例二

假设我们有两个数据框,一个是客户数据,包含客户编号、客户姓名、客户性别三列,另一个是订单数据,包含订单号、客户编号、订单金额三列。现在我们需要把这两个数据框按照客户编号连接起来,综合显示客户的基本信息和订单信息。

首先,我们创建客户数据和订单数据:

import pandas as pd

customer_data = pd.DataFrame({
    'id':[1, 2, 3, 4],
    'name':['Tom', 'Jerry', 'Mickey', 'Minnie'],
    'sex':['M', 'M', 'F', 'F']
})

order_data = pd.DataFrame({
    'order_id':['A001', 'A002', 'A003', 'A004', 'A005'],
    'customer_id':[1, 2, 3, 2, 1],
    'amount':[100, 150, 200, 120, 80]
})

这两个数据框的结构如下:

>>> customer_data
   id    name sex
0   1     Tom   M
1   2   Jerry   M
2   3  Mickey   F
3   4  Minnie   F

>>> order_data
  order_id  customer_id  amount
0     A001            1     100
1     A002            2     150
2     A003            3     200
3     A004            2     120
4     A005            1      80

接下来,我们调用merge函数,按照客户编号连接两个数据框,并显示客户基本信息和订单信息:

result = pd.merge(customer_data, order_data, on='id')
result = result[['id', 'name', 'sex', 'order_id', 'amount']]

其中,on表示左侧数据框和右侧数据框中的连接键都为’id’。在合并后的结果中,我们只需要保留’id’, ‘name’, ‘sex’, ‘order_id’, ‘amount’这几列。

合并后的结果如下:

>>> result
   id    name sex order_id  amount
0   1     Tom   M     A001     100
1   1     Tom   M     A005      80
2   2   Jerry   M     A002     150
3   2   Jerry   M     A004     120
4   3  Mickey   F     A003     200

总结

本文介绍了Pandas库中merge函数的使用方法和常见应用场景,并通过两个示例详细说明了其用法。merge函数可以帮助我们完成不同数据源之间的数据合并操作,让数据分析和处理更加高效和便捷。