Zaoqi's Blog -> Python数据分析教程 -> 图解Pandas ->
join - 横向连接
join - 横向连接¶
DataFrame.join是一种将两个可能具有不同索引的 DataFrame 的列组合成单个 DataFrame 的便捷方法。
在线刷题
检查 or 强化 Pandas 数据分析操作?👉在线体验「Pandas进阶修炼300题」
Note
本页面代码可以在线编辑、执行!
join 本质上和 merge 类似,或者说是 merge 的特殊情况,所以也是一种 SQL 风格的合并方法。
但和 merge 不一样的地方在于,join 只能按照行索引去合并数据,因此我翻译成 「横向连接」。
有关 join 的基本用法可以通过下图大致了解,至于 how 参数中的 inner、outer 可以参考 merge 中的图解。
需要注意的是 df2 与 df3 的连接,如果有重复的列名,需要指定合并后左右的列名后缀,否则会报错。
下面是官方文档中的案例,你可以修改相关代码来验证自己的想法!
默认方法¶
组合 left 和 right,并按照 left 的索引进行对齐
import pandas as pd
left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                     'B': ['B0', 'B1', 'B2']},
                     index=['K0', 'K1', 'K2'])
right = pd.DataFrame({'C': ['C0', 'C2', 'C3'],
                      'D': ['D0', 'D2', 'D3']},
                      index=['K0', 'K2', 'K3'])

left.join(right)
| A | B | C | D | |
|---|---|---|---|---|
| K0 | A0 | B0 | C0 | D0 | 
| K1 | A1 | B1 | NaN | NaN | 
| K2 | A2 | B2 | C2 | D2 | 
取并集¶
按下图所示进行组合

left.join(right, how='outer')
| A | B | C | D | |
|---|---|---|---|---|
| K0 | A0 | B0 | C0 | D0 | 
| K1 | A1 | B1 | NaN | NaN | 
| K2 | A2 | B2 | C2 | D2 | 
| K3 | NaN | NaN | C3 | D3 | 
取交集¶
按下图所示进行组合

left.join(right, how='inner')
| A | B | C | D | |
|---|---|---|---|---|
| K0 | A0 | B0 | C0 | D0 | 
| K2 | A2 | B2 | C2 | D2 | 
思考
用 merge 如何实现?
pd.merge(left, right, left_index=True, right_index=True, how='inner')
| A | B | C | D | |
|---|---|---|---|---|
| K0 | A0 | B0 | C0 | D0 | 
| K2 | A2 | B2 | C2 | D2 | 
按索引组合¶
重新产生数据并按下图所示进行连接(根据 key)

left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3'],
                     'key': ['K0', 'K1', 'K0', 'K1']})
right = pd.DataFrame({'C': ['C0', 'C1'],
                      'D': ['D0', 'D1']},
                      index=['K0', 'K1'])
left.join(right, on='key')
| A | B | key | C | D | |
|---|---|---|---|---|---|
| 0 | A0 | B0 | K0 | C0 | D0 | 
| 1 | A1 | B1 | K1 | C1 | D1 | 
| 2 | A2 | B2 | K0 | C0 | D0 | 
| 3 | A3 | B3 | K1 | C1 | D1 | 
多索引组合¶
按下图所示进行连接(根据 key1 和 key2)

left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3'],
                     'key1': ['K0', 'K0', 'K1', 'K2'],
                     'key2': ['K0', 'K1', 'K0', 'K1']})
index = pd.MultiIndex.from_tuples([('K0', 'K0'), ('K1', 'K0'),
                                  ('K2', 'K0'), ('K2', 'K1')])
right = pd.DataFrame({'C': ['C0', 'C1', 'C2', 'C3'],
                   'D': ['D0', 'D1', 'D2', 'D3']},
                  index=index)
left.join(right, on=['key1', 'key2'])
| A | B | key1 | key2 | C | D | |
|---|---|---|---|---|---|---|
| 0 | A0 | B0 | K0 | K0 | C0 | D0 | 
| 1 | A1 | B1 | K0 | K1 | NaN | NaN | 
| 2 | A2 | B2 | K1 | K0 | C1 | D1 | 
| 3 | A3 | B3 | K2 | K1 | C3 | D3 | 
                                    On this page
                                
                    
                    
                 
      
      
    