pandas merge 多字段连接
时间: 2024-09-23 16:12:13 浏览: 20
Pandas库中的`merge()`函数用于将两个数据框根据一个或多个共有的列(键)进行关联,这被称为多字段连接或多对多(Many-to-Many)连接。当你有两个DataFrame,它们各自有多个匹配的键,你可以同时指定这些键来进行合并。
例如,假设你有一个人员信息表(df1)和一个部门信息表(df2),每个人员可以属于多个部门,你可以通过以下步骤进行多字段连接:
```python
# 假设 df1 有 columns 'ID', 'Name', 和 df2 有 columns 'ID', 'Department'
merged_df = pd.merge(df1, df2, on=['ID'], how='left') # 使用ID作为主键进行左连接
# 如果你想根据 'ID' 和 'Department' 进行连接,可以在on参数中列出多个键
merged_df = pd.merge(df1, df2, on=['ID', 'Department'], how='outer') # 使用外连接获取所有可能的组合
在这个过程中,`how` 参数可以选择连接类型,如'inner'(只保留两个表都有匹配的记录)、'left'(保留左表的所有记录,并填充右表的信息)、'right'(反之亦然)或'outer'(保留所有记录,未找到匹配的部分用NaN填充)。
相关问题
pandas merge 左外连接
Pandas 的 merge 方法可以进行多种连接操作,其中之一是左外连接。左外连接指的是将左表中的所有记录与右表中匹配的记录连接在一起,如果右表中没有匹配的记录,则在结果表中使用 NULL 值。可以使用 how='left' 参数来实现左外连接。
示例:
```
left_df = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]})
right_df = pd.DataFrame({'key': ['B', 'D', 'E'], 'value': [5, 6, 7]})
result_df = pd.merge(left_df, right_df, on='key', how='left')
```
输出结果:
```
key value_x value_y
0 A 1 NaN
1 B 2 5
2 C 3 NaN
3 D 4 6
```
左表为left_df,右表为right_df,在key字段上进行左外连接。
pandas merge按照两个字段模糊匹配
可以使用`merge`函数中的`on`参数指定需要按照哪些字段进行合并,然后使用`str.contains()`函数进行模糊匹配。示例如下:
假设有两个DataFrame:`df1` 和 `df2`,需要按照`df1`中的列`A`和`B`与`df2`中的列`C`和`D`进行模糊匹配合并,代码如下:
```python
import pandas as pd
df1 = pd.DataFrame({'A': ['apple', 'banana', 'pear'], 'B': ['red', 'yellow', 'green'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'C': ['apple inc', 'banana fruit', 'pear company'], 'D': ['red color', 'yellow color', 'green leaf'], 'score': [10, 20, 30]})
df1['key'] = df1['A'] + df1['B'] # 拼接两个字段作为合并的键
df2['key'] = df2['C'] + df2['D']
merged = pd.merge(df1, df2, on='key') # 按照拼接后的字段合并
merged.drop('key', axis=1, inplace=True) # 去掉拼接后的字段
print(merged)
```
输出结果为:
```
A B value C D score
0 apple red 1 apple inc red color 10
1 banana yellow 2 banana fruit yellow color 20
2 pear green 3 pear company green leaf 30
```
在上述代码中,`df1`和`df2`中都新增了一个名为`key`的列,该列为拼接后的字段,然后使用`merge`函数按照该列进行合并。