たなブログ 教養を高めて生涯資産を増やすブログ(`・ω・´)

【Python Coding】pandas “agg” を使ってデータ集計を効率化する方法を解説します

PR Pythonを学ぶ

こんにちは、たなです。
今回は、pythonのpandasを用いて「agg」という方法を紹介していきたいと思います。

pandasでグルーピングした後に使える

「aggって…なに?」という人も多いかと思いますが、Aggregationの略で「集約」を意味する言葉です。pandasにはグルーピング機能もありますが、それを一段階進化させたようなイメージを持っておいてください。

かなり便利な方法で、僕は結構好きな方法です。詳しくコードを使って解説していきます。ちなみに「グルーピング」については【Python Coding】pandasでデータフレームをグループ化する方法で解説しているので、使い方を知りたい人は参考にしてください。

本記事の内容

  • pandas “agg” に関する基本的な使い方
  • pandas “agg” を使ってカラムごとにデータ統計量を算出する方法

僕のブログでは【完全ガイド】pythonの学習サイトをレベル別に紹介!【基礎から機械学習・人工知能までのロードマップ】という記事も公開しています。より高みを目指したい人は参考にしてみてください。

pythonの学習ロードマップへ

pandas “agg” を使ってデータ集計を効率的しよう

pandas “agg” を使えば列ごとに異なる統計量を算出できる

グルーピングに関する記事で紹介したように、データフレームをグルーピングした後には、「sum」や「mean」を適用することで「合計」や「平均」といった統計量を求めることが出来ます。

このように、グループごとに値を求めることをAggregationと呼ぶので、基本的な役割自体は今回の「agg」も同じになります。言葉だけだとわかりにくいので、この後紹介するコード結果を通じて理解を深めてもらえればと思いますが、「カラム(列)ごと」に異なる統計量を算出させることが出来る点が特徴です。

今回使うライブラリのインポート

import pandas as pd

まず最初に、今回使うライブラリをインポートしておきます。
pandasだけあればOKです。

利用データの作成

今回は、シンプルなデータを作っていきたいと思います。
ある一定期間におけるユーザーの購買行動を示したデータを想定します。

今回使うデータのイメージ図

上記データになるように、pandasを用いて以下のようにデータフレームを作成しておきます。

pandasを使ってデータフレームを作成

これから「id」でグルーピングし、その際に「agg」を適用する方法を合計「4つ」紹介していきます。

pandas “agg” の使い方①:1カラムに適用する

【具体例①の目的】 「amount」の合計を「id」別に算定する

【具体例①】ゴールイメージ

まずは、「agg」の基本的な使い方を見ていきます。
「id」でグルーピングをし、「amount」の合計を求めたコードが以下です。

【具体例①】aggを使って合計を求めた結果

上記コードのように、「groupby」を適用した後に「agg()」を加えるだけです。
(reset_indexはなくでも大丈夫です。)

この後のコードでも出てきますが、「sum」以外にも「mean」や「max」などの統計量も使えます。

pandas “agg” の使い方②:複数カラムに適用する(同じ統計量)

【具体例②の目的】 「amount」と「coupon」の合計を「id」別に算定する

【具体例②】ゴールイメージ

先ほどは「amount」だけのカラムを対象としていましたが、今度は「amount」と「coupon」の複数カラムを対象として「agg」を適用させてみたいと思います。

「id」でグルーピングをし、「amount」「coupon」の合計を求めたコードが以下となります。

【具体例②】aggを使って「複数カラム」の合計を求めた結果

同じ統計量(合計)を求めているので、グルーピング時にカラムを指定し、その後aggを適用した方が(今回のケースでは)効率的ですが、「辞書型」で指定する方法をここでは知っておいてください。

「key」部分に「カラム」を指定し、「value」部分に「集計関数」を指定することがポイントとなります。
この後、具体例④でも紹介しますが、「集計関数」部分に「自作関数」を適用することも可能です。

pandas “agg” の使い方③:複数カラムに適用する(異なる統計量)

【具体例③の目的】 「amountの平均」と「couponの最大値」を「id」別に算定する

【具体例③】ゴールイメージ

続いては、複数カラムに「異なる統計量」を適用する方法を見ていきます。
先ほどは、「amount」と「coupon」の「合計」を求めていましたが、今回は「amount」の「平均」と「coupon」の「最大値」を求めていきます。

カラムごとに異なる統計量を求める方法を示したコードが以下となります。

【具体例③】aggを使ってカラムごとに「異なる統計量」を算出した結果

具体例②と同じように、「辞書型」でカラム指定と集計関数の指定をすることで、カラムごとに異なる統計量を適用することが可能となります。

この使い方が理解出来れば、以下のような使い方も可能となります。

【応用例】 「amountの合計・平均・標準偏差」「couponの最大値・最小値」を「id」別に算出

【応用例】ゴールイメージ
【応用例】aggを使ってカラムごとに「異なる統計量」を算出した結果

カラムごとに異なる統計量を自由に算出することが出来るので、非常に便利ですね。

pandas “agg” の使い方④:カラムに自作関数を適用する方法

【具体例④の目的】 「amountの個数」と「couponの個数」を「id」別に算定する

【具体例④】ゴールイメージ

最後に、aggに関数を適用する方法を紹介しておきます。
ここでは、lambda式(無名関数)を用いていますが、defで定義した関数でも適用可能です。

【具体例④】aggに関数を適用した結果

この例では、単に値をカウントするような関数を定義しているので、処理結果にあまり意味はないですが、「aggに関数も適用出来るのね」と知ってもらえれば十分です。

lambda式(無名関数)の使い方は【Python Coding】lambda式(無名関数)とは?概要と使い方を紹介で紹介しています。

まとめ:pandas “agg”を使えばカラムごとに異なる統計量を算出できてデータ集計に役立つ


今回は、pythonのpandasで使える「agg」という方法を紹介してきました。

データフレームをグルーピングする方法はよく使える手法なので、「カラムごとに様々な統計量を算出したい」といった場面では、今回の方法を使ってみてください。

冒頭でも紹介しましたが、pythonの学習方法を【完全ガイド】pythonの学習サイトをレベル別に紹介!【基礎から機械学習・人工知能までのロードマップ】でまとめています。良ければあわせて読んでみてください。

よいpythonライフを。