df.merge()不同结果

102 阅读2分钟

用一个具体的例子来说明如何使用 pd.merge() 来获取交集、左差集、右差集和差集。

假设有两个 DataFrame:df1df2,它们分别包含员工的姓名和员工号,以及员工的部门。根据员工号来合并这两个 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() 函数来获取不同的集合:

  1. 获取交集:
intersection = pd.merge(df1, df2, on='员工号', how='inner')
print("交集:")
print(intersection)
  1. 获取左差集:
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)
  1. 获取右差集:
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)
  1. 获取差集:
difference = pd.merge(df1, df2, on='员工号', how='outer', indicator=True)
difference = difference[difference['_merge'] != 'both'].drop(columns=['_merge'])
print("差集:")
print(difference)

这些代码将分别输出交集、左差集、右差集和差集的结果。

1716359973423.png