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函数可以帮助我们完成不同数据源之间的数据合并操作,让数据分析和处理更加高效和便捷。