Pythonデータ分析 | pandasテーブル結合メソッド早見表

Pythonデータ分析に使えるpandasテーブル結合を紹介します。また最後に、データ分析の流れを経験できる初心者にオススメ学習コンテンツを紹介しますので、ご参考ください。

## 必要なライブラリ

```py
import pandas as pd
```

## サンプルデータ

```py
df_math = pd.DataFrame({
    '受験者': ['Aさん', 'Bさん', 'Cさん', 'Dさん', 'Eさん'], 
    '数学得点': ['50', '60', '70', '80', '90']
    })
df_eng = pd.DataFrame({
    '受験者': ['Aさん', 'Bさん', 'Cさん', 'Xさん', 'Yさん'], 
    '英語得点': ['99', '88', '77', '66', '55']
    })
```

[![Image from Gyazo](https://i.gyazo.com/4e92bae59f6e45daae924b628796974c.png)](https://gyazo.com/4e92bae59f6e45daae924b628796974c)

## 左外部結合　LEFT OUTER JOIN

```py
pd.merge(df_math, df_eng, on='受験者', how='left')
```

[![Image from Gyazo](https://i.gyazo.com/e97fcdd55f7f74646e289809c9b56deb.png)](https://gyazo.com/e97fcdd55f7f74646e289809c9b56deb)

## 右外部結合　RIGHT OUTER JOIN

```py
pd.merge(df_math, df_eng, on='受験者', how='right')
```

[![Image from Gyazo](https://i.gyazo.com/791f4a813d49352f80d2a76535537d20.png)](https://gyazo.com/791f4a813d49352f80d2a76535537d20)

## 完全外部結合　FULL OUTER JOIN

```py
pd.merge(df_math, df_eng, on='受験者', how='outer')
```

[![Image from Gyazo](https://i.gyazo.com/d84bdeb53386dbad36b0c8fe9a211cb8.png)](https://gyazo.com/d84bdeb53386dbad36b0c8fe9a211cb8)

## 内部結合　INNER JOIN

```py
pd.merge(df_math, df_eng, on='受験者', how='inner')
# howを指定しない場合、デフォルトでinnerが指定される。
# pd.merge(df_math, df_eng, on='受験者')も同じ結果となる
```

[![Image from Gyazo](https://i.gyazo.com/d02fc90323a646a440964f1014b43177.png)](https://gyazo.com/d02fc90323a646a440964f1014b43177)

## 結合方法の指定無し

```py
pd.merge(df_math, df_eng, on='受験者')
# howを指定しない場合、デフォルトでinnerが指定される。
```

[![Image from Gyazo](https://i.gyazo.com/d02fc90323a646a440964f1014b43177.png)](https://gyazo.com/d02fc90323a646a440964f1014b43177)

## 結合キーの指定無し

```py
pd.merge(df_math, df_eng)
# onを指定しない場合、自動で同じ列名のキーが指定される。
```

[![Image from Gyazo](https://i.gyazo.com/d02fc90323a646a440964f1014b43177.png)](https://gyazo.com/d02fc90323a646a440964f1014b43177)

## カラム名称が異なる結合キー指定

### サンプルデータ

```py
df_math = pd.DataFrame({
    '受験者': ['Aさん', 'Bさん', 'Cさん', 'Dさん', 'Eさん'], 
    '数学得点': ['50', '60', '70', '80', '90']
    })
df_eng_v2 = pd.DataFrame({
    '氏名': ['Aさん', 'Bさん', 'Cさん', 'Xさん', 'Yさん'], 
    '英語得点': ['99', '88', '77', '66', '55']
    })
```

[![Image from Gyazo](https://i.gyazo.com/3fa36c4b9f17a3b2393da172cc8ff101.png)](https://gyazo.com/3fa36c4b9f17a3b2393da172cc8ff101)

```py
pd.merge(df_math, df_eng_v2, left_on='受験者', right_on='氏名')
```

[![Image from Gyazo](https://i.gyazo.com/c65563c0844a2c8b75ab2760082fb43b.png)](https://gyazo.com/c65563c0844a2c8b75ab2760082fb43b)

## 2つの結合キーの使用

### サンプルデータ

```py
df_math_birth = pd.DataFrame({
    '受験者': ['Aさん', 'Bさん', 'Cさん', 'Cさん', 'Cさん'], 
    '出身': ['大阪', '沖縄', '北海道', '広島', '東京'], 
    '数学得点': ['50', '60', '70', '80', '90']
    })
df_eng_birth = pd.DataFrame({
    '受験者': ['Aさん', 'Bさん', 'Cさん', 'Xさん', 'Yさん'], 
    '出身': ['大阪', '沖縄', '広島', '奈良', '熊本'], 
    '英語得点': ['99', '88', '77', '66', '55']
    })
```

[![Image from Gyazo](https://i.gyazo.com/e31e3cb84f31eec1ee7f64cfb84ccbf8.png)](https://gyazo.com/e31e3cb84f31eec1ee7f64cfb84ccbf8)

```py
pd.merge(df_math_birth, df_eng_birth, on=['受験者', '出身'])
```

[![Image from Gyazo](https://i.gyazo.com/2714f8318dd509962208008b6b0bb652.png)](https://gyazo.com/2714f8318dd509962208008b6b0bb652)

## 縦に結合 UNION

```py
pd.concat([df_math, df_math, df_math], ignore_index=True)
# ignore_indexはインデックスの降り直し
```

[![Image from Gyazo](https://i.gyazo.com/8b7861faee62f8babdcfdca19fcd00f4.png)](https://gyazo.com/8b7861faee62f8babdcfdca19fcd00f4)

```py
df_math.append(df_math, ignore_index=True)
# appendでも縦に結合できる
```

[![Image from Gyazo](https://i.gyazo.com/4f18110ee5b0ef31326c661308975b29.png)](https://gyazo.com/4f18110ee5b0ef31326c661308975b29)

## Pythonデータ分析学習コンテンツ（私が制作したものの紹介）

以下、私が制作したものですが、初心者向けのPythonデータ分析学習コンテンツです。データの取り込み、前処理から可視化の流れを学習できる教材です。考察イメージまで記載されているのでオススメです。一部無料公開されているので、ご興味あればお試しください。

https://www.techpit.jp/courses/30