1. test 1
  2. test 2
コース一覧
データ分析入門 Python(pandas)
mergeで結合する

データ分析入門 Python(pandas)

pandasによるデータの読み込み・抽出・前処理、groupbyによる集計、表の結合、matplotlibによる可視化、そして前月比や移動平均を使った分析の実践まで、データ分析の基礎を、毎レッスン実際にコードを書き、多店舗ショップの売上データを分析レポートに仕上げながら学べるコースです。Python入門を修了した方を対象としています。約 14.5 時間 (1 日 30 分 × 29 日) で 57 レッスンを修了でき、修了後は手元のCSVを自力で分析し、グラフと示唆のあるレポートを作れるようになります。

1
データ分析のはじめかた
01. データ分析とは15分
02. pandasとは15分
03. ノートブックの使い方15分
04. CSVを読み込む15分
05. つくる:データと対面する20分
06. 第1章クイズ10分
2
DataFrameのきほん
01. SeriesとDataFrame15分
02. 概観コマンド15分
03. 列を選ぶ15分
04. 行を選ぶ15分
05. 条件で抽出する15分
06. 複数条件15分
07. 並べ替える15分
08. つくる:抽出レポート20分
09. 第2章クイズ10分
3
データの前処理
01. 欠損を見つける15分
02. 欠損を埋める・落とす15分
03. 型を直す15分
04. 重複を消す15分
05. 表記ゆれを整える15分
06. 日付型にする15分
07. つくる:データクレンジング20分
08. 第3章クイズ10分
4
集計とグループ化
01. 集計のきほん15分
02. groupby15分
03. 複数キーで束ねる15分
04. aggで一気に15分
05. ピボットテーブル15分
06. 出現回数15分
07. つくる:月次集計表20分
08. 第4章クイズ10分
5
結合と整形
01. なぜ結合が要るか15分
02. mergeで結合する15分
03. 結合の種類15分
04. 縦に積む15分
05. つくる:統合データセット20分
06. 第5章クイズ10分
6
可視化
01. グラフのきほん15分
02. 棒グラフ15分
03. 折れ線グラフ15分
04. ヒストグラム15分
05. 複数系列15分
06. ラベルと整え15分
07. つくる:ダッシュボード4枚20分
08. 第6章クイズ10分
7
分析の実践
01. 問いの立て方15分
02. 前月比15分
03. 移動平均15分
04. 構成比15分
05. 外れ値を見つける15分
06. つくる:示唆を1枚に20分
07. 第7章クイズ10分
8
総合制作
01. 分析レポート完成20分
02. 提案を書く20分
03. 自由分析20分
04. 見せる形に整える20分
05. 完成と次のステップ20分

mergeで結合する

このレッスンでできるようになること。merge を使って売上明細と商品マスタをつなぎ、明細に定価の情報を持ち込めるようになります。SQL の JOIN と同じ操作です。

前回、明細には定価が無く、商品マスタにあることを確かめました。この2つの表を鍵でつなぐのが merge です。

Python

merged = sales.merge(products, on="商品名")

SQL で書くとこうなります。

SQL クエリ

SELECT * FROM sales INNER JOIN products ON sales.商品名 = products.商品名;

対応は素直です。sales.merge(products) が FROM sales JOIN products、on="商品名" が ON 以下の条件です。既定の結合方法は inner なので、この1行は INNER JOIN そのものです。SQL で JOIN が書ける方なら、覚えることは引数の名前だけです。

注意点を3つ挙げます。1つめは、on に渡す列名は両方の表に同じ名前で存在している必要があるということです。片方が商品名、もう片方が 品名 なら、left_on と right_on で別々に指定します。実務では列名が揃っていないほうが普通なので、この形も覚えておくと困りません。

2つめは、鍵以外に同じ名前の列があると、結合後に _x と _y という接尾辞が付くことです。マイショップの明細とマスタは、どちらも カテゴリ という列を持っています。商品名だけで結合すると、結合後は カテゴリ_x と カテゴリ_y になります。どちらがどちらか分からなくなるので、両方の意味が同じなら on=["商品名", "カテゴリ"] のように鍵を2つにして揃えてしまうのが素直です。

3つめが最も重要です。inner の結合では、マスタに無い商品名を持つ行は結果から消えます。前回見つけた載っていない商品がそれにあたります。行が減ったことに気づかないまま集計すると、総売上が実際より小さく出ます。結合の前後で行数を必ず比べてください。減っているなら、それが意図した結果かどうかを判断する必要があります。この判断を道具にするのが次のレッスンです。

要件

  1. merge に on=["商品名", "カテゴリ"] を渡して結合する
  2. 結合前後の行数の差から dropped を求める
  3. 商品名ごとの売上合計は groupby で求める
  4. 数値はすべて int に直して返す

入出力例

join_products("売上日,店舗,商品名,カテゴリ,数量,金額 2026-01-05,渋谷店,白磁のマグカップ,食器,2,3600 2026-01-09,横浜店,白磁のマグカップ,食器,4,7200 2026-01-06,横浜店,鉄のフライパン,調理器具,1,7800 2026-01-07,大宮店,藍染めのふきん,雑貨,3,1800 ", "商品名,カテゴリ,定価 白磁のマグカップ,食器,1800 鉄のフライパン,調理器具,7800 ") → {"by_product":{"白磁のマグカップ":10800,"鉄のフライパン":7800},"dropped":1,"rows":3} join_products("売上日,店舗,商品名,カテゴリ,数量,金額 2026-02-03,渋谷店,鋳物ホーロー鍋,調理器具,1,16800 2026-02-04,大宮店,積み重ね収納ボックス,収納,3,4500 ", "商品名,カテゴリ,定価 鋳物ホーロー鍋,調理器具,16800 積み重ね収納ボックス,収納,1500 ") → {"by_product":{"積み重ね収納ボックス":4500,"鋳物ホーロー鍋":16800},"dropped":0,"rows":2}

ヒント

merged = sales.merge(products, on=["商品名", "カテゴリ"]) が土台です

len(sales) と len(merged) の差が消えた行数です

merged.groupby("商品名")["金額"].sum() で商品別の合計が出ます

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/10

関連レッスン

  • 結合の種類

    inner/leftを使い分けられる

  • 縦に積む

    期間別ファイルを連結できる

  • つくる:統合データセット

    結合・連結で分析基盤を作れる

  • 第5章クイズ

    章の理解を確認できる

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • mergeブランチを 1 本に合流させる 2 通りのやり方
  • SQLデータベースを操作するための共通言語
  • JOIN複数テーブルをくっつけて 1 つの結果に並べる SQL
  • 引数位置引数=順番で渡す。
  • 判断YES/NO 分岐を表す菱形
main.py
学習モード
エディタを読み込んでいます

メモ

mergeで結合する

⌘S で保存