pd.merge 如果右表的key有重复,左表会多出来一倍的计数,举例代码
时间: 2024-05-06 08:19:11 浏览: 77
假设有以下两个数据表:
``` python
import pandas as pd
left_df = pd.DataFrame({"key": ["A", "B", "C", "D"], "value": [1, 2, 3, 4]})
right_df = pd.DataFrame({"key": ["A", "B", "B", "C", "C", "C"], "value": [5, 6, 7, 8, 9, 10]})
```
左表 `left_df`:
| key | value |
| :-: | :---: |
| A | 1 |
| B | 2 |
| C | 3 |
| D | 4 |
右表 `right_df`:
| key | value |
| :-: | :---: |
| A | 5 |
| B | 6 |
| B | 7 |
| C | 8 |
| C | 9 |
| C | 10 |
如果使用 `pd.merge` 进行合并:
``` python
merged_df = pd.merge(left_df, right_df, on="key")
print(merged_df)
```
则会得到以下结果:
| key | value_x | value_y |
| :-: | :-----: | :-----: |
| A | 1 | 5 |
| B | 2 | 6 |
| B | 2 | 7 |
| C | 3 | 8 |
| C | 3 | 9 |
| C | 3 | 10 |
可以看到,由于右表中 key 为 "B" 和 "C" 的行出现了重复,因此在合并后的结果中,左表中对应的行也会出现重复。这是因为 `pd.merge` 默认使用的是 inner join,即只保留两个表中都存在的 key 对应的行。如果需要保留右表中所有的 key 对应的行,可以使用 outer join:
``` python
merged_df = pd.merge(left_df, right_df, on="key", how="outer")
print(merged_df)
```
则会得到以下结果:
| key | value_x | value_y |
| :-: | :-----: | :-----: |
| A | 1 | 5 |
| B | 2 | 6 |
| B | 2 | 7 |
| C | 3 | 8 |
| C | 3 | 9 |
| C | 3 | 10 |
| D | 4 | NaN |
可以看到,在使用 outer join 后,左表中没有对应 key 的行也被保留了下来,并用 NaN 填充了对应的列。
阅读全文