Pandas 基礎 (9) - 組合方法 merge

Rachel發表於2019-04-02

首先, 還是以天氣為例, 準備如下資料:

df1 = pd.DataFrame({
    'city': ['newyork', 'chicago', 'orlando'],
    'temperature': [21, 24, 32],
})

df2 = pd.DataFrame({
    'city': ['newyork', 'chicago', 'orlando'],
    'humidity': [89, 79, 80],
})

df = pd.merge(df1, df2, on='city')

輸出:

Pandas 基礎(9) - 組合方法 merge

上面的例子就是以 'city' 為基準對兩個 dataframe 進行合併, 但是兩組資料都是高度一致, 下面調整一下:

df1 = pd.DataFrame({
    'city': ['newyork', 'chicago', 'orlando', 'baltimore'],
    'temperature': [21, 24, 32, 29],
})

df2 = pd.DataFrame({
    'city': ['newyork', 'chicago', 'san francisco'],
    'humidity': [89, 79, 80],
})

df = pd.merge(df1, df2, on='city')

輸出:

Pandas 基礎(9) - 組合方法 merge

從輸出我們看出, 透過 merge 合併, 會取兩個資料的交集.

Pandas 基礎(9) - 組合方法 merge

那麼, 我們應該可以設想到, 可以透過調整引數, 來達到不同的取值範圍.
取並集:

df = pd.merge(df1, df2, on='city', how='outer')

輸出:

Pandas 基礎(9) - 組合方法 merge

左對齊:

df = pd.merge(df1, df2, on='city', how='left')

輸出:

Pandas 基礎(9) - 組合方法 merge

Pandas 基礎(9) - 組合方法 merge

右對齊:

df = pd.merge(df1, df2, on='city', how='right')

Pandas 基礎(9) - 組合方法 merge

Pandas 基礎(9) - 組合方法 merge

另外, 在我們取並集的時候, 我們有時可能會想要知道, 某個資料是來自哪邊, 可以透過 indicator 引數來獲取:

df = pd.merge(df1, df2, on='city', how='outer', indicator=True)

輸出:

Pandas 基礎(9) - 組合方法 merge

在上面的例子中, 被合併的資料的列名是沒有衝突的, 所以合併的很順利, 那麼如果兩組資料有相同的列名, 又會是什麼樣呢? 看下面的例子:

df1 = pd.DataFrame({
    'city': ['newyork', 'chicago', 'orlando', 'baltimore'],
    'temperature': [21, 24, 32, 29],
    'humidity': [89, 79, 80, 69],
})

df2 = pd.DataFrame({
    'city': ['newyork', 'chicago', 'san francisco'],
    'temperature': [30, 32, 28],
    'humidity': [80, 60, 70],
})

df = pd.merge(df1, df2, on='city')

輸出:

Pandas 基礎(9) - 組合方法 merge

我們發現, 相同的列名被自動加上了 'x', 'y' 作為區分, 為了更直觀地觀察資料, 我們也可以自定義這個區分的標誌:

df3 = pd.merge(df1, df2, on='city', suffixes=['_left', '_right'])

輸出:

Pandas 基礎(9) - 組合方法 merge

以上, 就是關於 merge 合併的相關內容。

注:Panas 系列 均是參考 Pandas Time Series Analysis 系列教程,個人覺得講得很好。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章