跳到主要内容

Pandas 多键合并

在数据分析中,我们经常需要将多个数据集合并在一起,以便进行更全面的分析。Pandas库提供了强大的合并功能,特别是当我们需要基于多个键(列)进行合并时。本文将详细介绍如何使用Pandas进行多键合并,并通过实际案例帮助你理解这一概念。

什么是多键合并?

多键合并是指基于多个列(键)将两个或多个数据表合并在一起。与单键合并不同,多键合并允许我们根据多个条件来匹配和合并数据。这在处理复杂数据集时非常有用,尤其是在数据表中的记录不能仅通过一个键唯一标识时。

基本语法

Pandas提供了merge()函数来实现多键合并。其基本语法如下:

python
pd.merge(left, right, on=['key1', 'key2'], how='inner')
  • leftright 是要合并的两个数据表。
  • on 参数指定用于合并的键(列名),可以是一个列表,包含多个键。
  • how 参数指定合并方式,如 innerouterleftright

示例:多键合并

假设我们有两个数据表 df1df2,分别包含以下数据:

python
import pandas as pd

df1 = pd.DataFrame({
'key1': ['A', 'B', 'C', 'D'],
'key2': ['W', 'X', 'Y', 'Z'],
'value1': [1, 2, 3, 4]
})

df2 = pd.DataFrame({
'key1': ['A', 'B', 'C', 'D'],
'key2': ['W', 'X', 'Y', 'Z'],
'value2': [5, 6, 7, 8]
})

我们可以通过以下代码将这两个数据表基于 key1key2 进行合并:

python
result = pd.merge(df1, df2, on=['key1', 'key2'], how='inner')
print(result)

输出结果为:

  key1 key2  value1  value2
0 A W 1 5
1 B X 2 6
2 C Y 3 7
3 D Z 4 8

合并方式

Pandas支持多种合并方式,具体如下:

  • inner:只保留两个数据表中都存在的键。
  • outer:保留所有键,缺失值用NaN填充。
  • left:保留左边数据表的所有键,右边数据表中不存在的键用NaN填充。
  • right:保留右边数据表的所有键,左边数据表中不存在的键用NaN填充。

示例:不同合并方式

让我们通过一个例子来展示不同合并方式的区别。

python
df1 = pd.DataFrame({
'key1': ['A', 'B', 'C', 'D'],
'key2': ['W', 'X', 'Y', 'Z'],
'value1': [1, 2, 3, 4]
})

df2 = pd.DataFrame({
'key1': ['A', 'B', 'C', 'E'],
'key2': ['W', 'X', 'Y', 'Z'],
'value2': [5, 6, 7, 8]
})

# 内连接
inner_result = pd.merge(df1, df2, on=['key1', 'key2'], how='inner')
print("Inner Join:\n", inner_result)

# 外连接
outer_result = pd.merge(df1, df2, on=['key1', 'key2'], how='outer')
print("Outer Join:\n", outer_result)

# 左连接
left_result = pd.merge(df1, df2, on=['key1', 'key2'], how='left')
print("Left Join:\n", left_result)

# 右连接
right_result = pd.merge(df1, df2, on=['key1', 'key2'], how='right')
print("Right Join:\n", right_result)

输出结果为:

Inner Join:
key1 key2 value1 value2
0 A W 1 5
1 B X 2 6
2 C Y 3 7

Outer Join:
key1 key2 value1 value2
0 A W 1.0 5.0
1 B X 2.0 6.0
2 C Y 3.0 7.0
3 D Z 4.0 NaN
4 E Z NaN 8.0

Left Join:
key1 key2 value1 value2
0 A W 1 5.0
1 B X 2 6.0
2 C Y 3 7.0
3 D Z 4 NaN

Right Join:
key1 key2 value1 value2
0 A W 1.0 5
1 B X 2.0 6
2 C Y 3.0 7
3 E Z NaN 8

实际应用场景

场景1:合并销售数据

假设我们有两个数据表,一个包含销售订单信息,另一个包含客户信息。我们需要将这两个数据表合并,以便分析每个订单对应的客户信息。

python
orders = pd.DataFrame({
'order_id': [1, 2, 3, 4],
'customer_id': [101, 102, 103, 104],
'product': ['A', 'B', 'C', 'D']
})

customers = pd.DataFrame({
'customer_id': [101, 102, 103, 105],
'name': ['Alice', 'Bob', 'Charlie', 'David']
})

# 合并订单和客户信息
merged_data = pd.merge(orders, customers, on='customer_id', how='left')
print(merged_data)

输出结果为:

   order_id  customer_id product     name
0 1 101 A Alice
1 2 102 B Bob
2 3 103 C Charlie
3 4 104 D NaN

场景2:合并多个数据表

在某些情况下,我们可能需要合并多个数据表。例如,我们有一个包含产品信息的数据表,一个包含销售数据的数据表,以及一个包含库存数据的数据表。我们可以通过多键合并将这些数据表合并在一起。

python
products = pd.DataFrame({
'product_id': [1, 2, 3, 4],
'product_name': ['A', 'B', 'C', 'D']
})

sales = pd.DataFrame({
'product_id': [1, 2, 3, 4],
'sales_amount': [100, 200, 300, 400]
})

inventory = pd.DataFrame({
'product_id': [1, 2, 3, 4],
'inventory_count': [10, 20, 30, 40]
})

# 合并产品、销售和库存信息
merged_data = pd.merge(pd.merge(products, sales, on='product_id'), inventory, on='product_id')
print(merged_data)

输出结果为:

   product_id product_name  sales_amount  inventory_count
0 1 A 100 10
1 2 B 200 20
2 3 C 300 30
3 4 D 400 40

总结

多键合并是Pandas中非常强大的功能,能够帮助我们在数据分析中高效地合并多个数据表。通过本文的学习,你应该已经掌握了如何使用Pandas进行多键合并,并了解了不同合并方式的区别。希望你能在实际项目中灵活运用这些技巧。

附加资源

练习

  1. 创建两个数据表,分别包含学生信息和成绩信息,并使用多键合并将它们合并在一起。
  2. 尝试使用不同的合并方式(innerouterleftright)合并数据表,并观察结果的不同。
  3. 在实际项目中找到一个需要多键合并的场景,并尝试实现它。
提示

在合并数据时,务必检查键的唯一性和数据的完整性,以确保合并结果的准确性。