pandas進行資料的交集與並集方式的資料合併
資料合併有多種方式,其中最常見的應該就是交集和並集的求取。之前通過分析總結過pandas資料merge功能預設的行為,其實預設下求取的就是兩個資料的“交集”。
有如下資料定義:
In [26]: df1
Out[26]:
data1 key
0 0 b
1 1 b
2 2 a
3 3 c
4 4 a
5 5 a
6 6 b
In [27]: df2
Out[27]:
data2 key
0 0 a
1 1 b
2 2 d
3 3 b
進行merge的結果:
In [28]: pd.merge(df1,df2)
Out[28]:
data1 key data2
0 0 b 1
1 0 b 3
2 1 b 1
3 1 b 3
4 6 b 1
5 6 b 3
6 2 a 0
7 4 a 0
8 5 a 0
從上面的結果中能夠看出,merge的預設處理行為是求取了兩組資料key的交集,但是對於key的值進行了並集的求取。其實也很好理解,如果僅僅是求取交集而資料沒有任何合併那就不叫做資料合併了。
接下來試一下制定了引數的的交集資料合併處理:
In [29]: pd.merge(df1,df2,how='inner')
Out[29]:
data1 key data2
0 0 b 1
1 0 b 3
2 1 b 1
3 1 b 3
4 6 b 1
5 6 b 3
6 2 a 0
7 4 a 0
8 5 a 0
In [30]: result_inner = pd.merge(df1,df2,how=
In [31]: result_default = pd.merge(df1,df2)
In [32]: result_inner == result_default
Out[32]:
data1 key data2
0 True True True
1 True True True
2 True True True
3 True True True
4 True True True
5 True True True
6 True True True
7 True True True
8 True True True
通過上面的結果可以看出:制定了引數的的交集資料合併處理的結果與資料合併方法merge的預設行為是一致的。
再試一下並集資料合併處理方法,這需要制定引數how為outer:
In [35]: result_outer = pd.merge(df1,df2,how='outer')
In [36]: result_outer
Out[36]:
data1 key data2
0 0.0 b 1.0
1 0.0 b 3.0
2 1.0 b 1.0
3 1.0 b 3.0
4 6.0 b 1.0
5 6.0 b 3.0
6 2.0 a 0.0
7 4.0 a 0.0
8 5.0 a 0.0
9 3.0 c NaN
10 NaN d 2.0
通過上面的執行結果可以看出:合併後的資料中的key擁有了兩組資料所有的key,而資料雖然有一部分兩組資料不能夠重合,但也通過NaN的值進行了相應的填補。
還有一點需要注意的,那就是合併之後的資料個數。合併後的資料中,key的個數是兩組資料中分別擁有的資料的笛卡爾乘積。如果其中一組沒有的時候,進行合併的時候另一組資料中會建立一個NaN數值的物件與之進行合併。