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