groupby/mergeで集計と結合
整えたデータは、最後に「集計」と「結合」で分析の形にまとめます。ピボットテーブルの延長では表現しづらい多軸・多段の集計をgroupbyで、複数の表の突き合わせをmergeで行う方法を確認します。
前節でdfを上書きしているため、まず第1節の売上表(商品カテゴリ・地域・売上・数量)を改めて読み込みます。
グループ化(groupby)
groupbyは、指定した列の値でまとめて集計する操作で、ExcelのピボットテーブルやSUMIFSに当たります。まず地域ごとの売上合計を求めてみましょう。
df = xl("A1:D7", headers=True)
df.groupby("地域")["売上"].sum()
実行すると、地域ごとに売上を合計した結果が得られます。
これは、ピボットテーブルで行に「地域」、値に「売上の合計」を置いた状態に当たります。groupbyの強みは、ここから軸や指標を増やすのが容易な点にあります。
例えば「地域×商品カテゴリ」の2軸で、売上と数量をまとめて集計してみましょう。
df.groupby(["地域", "商品カテゴリ"]).agg({"売上": "sum", "数量": "sum"})
複数の軸はリストで渡し、aggで指標ごとに集計方法を指定します。「部門×月×指標」のような多次元集計も同じ書き方で組み立てられ、df_g[df_g["売上"] >= 100000]のような条件を重ねて絞り込むこともできます。画面操作で作るピボットテーブルと違い、読めるコードとして残り、翌月のデータにも同じ手順を適用できます。
複数テーブルの結合(merge)
mergeとは、共通する列(キー)を突き合わせて、複数の表を1つにまとめる操作です。ExcelのVLOOKUPやXLOOKUPが担ってきた役割に当たります。例として、商品カテゴリごとの担当部門をまとめた分類マスタを、同じシートの別範囲(例:F1:G4)に用意します。
| 商品カテゴリ | 担当部門 |
| スキンケア | スキンケア事業部 |
| メイク | メイク事業部 |
| ヘアケア | ヘアケア事業部 |
このマスタを、商品カテゴリをキーにして売上表へ結合します。
master = xl("F1:G4", headers=True)
pd.merge(df, master, on="商品カテゴリ", how="left")
onで結合キー、how="left"で左側の表(ここでは売上表)を軸にすることを指定します。VLOOKUPと違い、on=["地域", "商品カテゴリ"]のように複数列を組み合わせた複合キーでも一度に突き合わせられます。
このように、groupbyで多軸の集計を、mergeで表どうしの結合を、いずれも短いコードとして残せます。ピボットテーブルやVLOOKUPの手順がブックに埋もれてしまう状態から、誰が見ても同じ結果を再現できる形へと、分析の土台が変わってきます。
まとめ
本記事では、xl()で取り込んだ表を行ラベルと列名のまとまりとして捉えるDataFrameという考え方を土台に、全角半角・空白・欠損へのクレンジングと欠損値処理、groupbyによる多軸集計とmergeによる表の突き合わせまでを紹介しました。
いずれも、「セルを1つずつ触る」作業から「読めるコードを手順として残す」への切り替えがポイントです。前処理をコードによる再現可能な型にしておけば、属人的だった作業を誰もが同じ結果にたどり着ける資産に変えられます。
