1. 程式人生 > >pandas進行資料的交集與並集方式的資料合併

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=

'inner')

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的預設行為是一致的。

再試一下並集資料合併處理方法,這需要制定引數howouter

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數值的物件與之進行合併。