用一个具体的例子来说明如何使用 pd.merge() 来获取交集、左差集、右差集和差集。
假设有两个 DataFrame:df1 和 df2,它们分别包含员工的姓名和员工号,以及员工的部门。根据员工号来合并这两个 DataFrame,并找出交集、左差集、右差集和差集。
首先,让我们创建这两个 DataFrame:
import pandas as pd
# 创建 DataFrame df1
df1 = pd.DataFrame({
'员工号': [101, 102, 103, 104],
'姓名': ['张三', '李四', '王五', '赵六'],
'部门': ['技术部', '销售部', '财务部', '人力资源部']
})
# 创建 DataFrame df2
df2 = pd.DataFrame({
'员工号': [102, 103, 105, 106],
'姓名': ['李四', '王五', '小明', '小红'],
'部门': ['销售部', '财务部', '市场部', '运营部']
})
print("DataFrame df1:")
print(df1)
print("\nDataFrame df2:")
print(df2)
这将输出:
DataFrame df1:
员工号 姓名 部门
0 101 张三 技术部
1 102 李四 销售部
2 103 王五 财务部
3 104 赵六 人力资源部
DataFrame df2:
员工号 姓名 部门
0 102 李四 销售部
1 103 王五 财务部
2 105 小明 市场部
3 106 小红 运营部
现在,我们可以使用 pd.merge() 函数来获取不同的集合:
- 获取交集:
intersection = pd.merge(df1, df2, on='员工号', how='inner')
print("交集:")
print(intersection)
- 获取左差集:
left_difference = pd.merge(df1, df2, on='员工号', how='left', indicator=True)
left_difference = left_difference[left_difference['_merge'] == 'left_only'].drop(columns=['_merge'])
print("左差集:")
print(left_difference)
- 获取右差集:
right_difference = pd.merge(df1, df2, on='员工号', how='right', indicator=True)
right_difference = right_difference[right_difference['_merge'] == 'right_only'].drop(columns=['_merge'])
print("右差集:")
print(right_difference)
- 获取差集:
difference = pd.merge(df1, df2, on='员工号', how='outer', indicator=True)
difference = difference[difference['_merge'] != 'both'].drop(columns=['_merge'])
print("差集:")
print(difference)
这些代码将分别输出交集、左差集、右差集和差集的结果。