數據規整化:pandas 求合併數據集(交集並集等)

 

數據集的合併或鏈接運算是經過一個或多個鍵將行連接起來的。這些運算是關係型數據庫的核心。pandas的merge函數是對數據應用這些算法的這樣切入點。算法

 

默認是交集, inner鏈接

列名不一樣能夠分別指定:數據庫

 

其餘方式還要‘left’、‘right’以及「outer」。外連接求取的是鍵的並集, 組合了左鏈接和右鏈接的效果。函數

 

 how 的做用是合併時候以誰爲標準,是否保留NaN值

 

多對多

 

多對多 鏈接產生的行的笛卡爾積。因爲左邊的DataFrame有3個‘b’行, 右邊的有2個,因此最終結果中spa

就有6個‘b’行。3d

 

 

 根據多個鍵進行合併, 傳入一個由列明組成的列表便可:code

left = DataFrame(
    {"key1": ['foo', 'foo', 'bar'],
     "key2": ['one', 'two', 'one'],
     "lval": [1, 2, 3]
     }
)
right = DataFrame(
    {"key1": ['foo', 'foo', 'bar', 'bar'],
     "key2": ['one', 'one', 'one', 'two'],
     "rval": [4, 5, 6, 7]
     }
)
print(left)
print(right)
pm = pd.merge(left, right, on=["key1", "key2"], how="outer")
print(pm)

 

 on與left_on 和right_on的區別

 

 

這個是left_on 和right_on 對象

 

 去重或更改後綴

 

 merge函數的參數

 

 

 索引上的合併

 

 

merge方法求取鏈接鍵的並集

 

 對於層次化索引的數據

這個時候必須以列表的形式指明用做合併鍵的多個列(注意對重複索引的處理)blog

lefth = DataFrame({'key1':[ 'Ohio', 'Ohio', 'Ohio','Nevada', 'Nevada',],
                   "key2":[2000, 2001, 2002,2001, 2002],
                   "data":np.arange(5.)
                   })

righth = DataFrame(np.arange(12).reshape((6, 2)),
                   index=[['Nevada', 'Nevada', 'Ohio', 'Ohio', 'Ohio', 'Ohio'],
                          [2001, 2000, 2000, 2000, 2001, 2002]],
                   columns=['event1', 'event2']
                   )

print(lefth)
print(righth)
pm = pd.merge(lefth, righth,left_on=['key1', 'key2'], right_index=True)
print(pm)

 

 索引並集

 

 DataFrame.join實例方法

它能更爲方便地實現索引合併。它還可用於和合並多個帶有相同或類似索引的DataFrame對象, 而無論他們索引

之間有重疊的列。pandas

print(left1.join(right1, how='inner'))left2.join([1, 2], how='outer')  #多個
相關文章
相關標籤/搜索