python pythonコード集 pandas python データサイエンス 非エンジニア向け

【Python Coding】pandas「agg」でデータ集計を効率化する

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

具体的には、pandasを使ってDataFrameを「グルーピング」した後に使える方法となります。
「グルーピングってどうやるの?」という方は、以下の記事で紹介しているので参考にしてみてください。

【こんな人に読んで欲しい記事です】

● DataFrameをグルーピングする時に用いる「agg」の使い方を知りたい方

● DataFrameに対して、効率的な集計方法が出来るようになりたい方

具体的な使い方はこれから紹介していきますが、直感的に説明すると「agg」を用いた方法は、上記記事で紹介したグルーピング方法を一段階進化させたようなイメージです。

結構便利な方法で個人的には好きな方法なので、みなさんも参考にしてみてください。

「agg」とは「Aggregation」のこと

そもそも「agg」とは何でしょうか?
「agg」は「Aggregation」の略のことで、日本語で「集約」を意味する言葉です。

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

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

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

pandasをインポートしておく

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

利用データの作成

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

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

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

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

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

「agg」の具体例①|1カラムに適用する方法

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

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

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

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

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

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

「agg」の具体例②|複数カラムに適用する方法 (同じ統計量)

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

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

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

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

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

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

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

「agg」の具体例③|複数カラムに適用する方法 (異なる統計量)

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

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

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

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

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

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

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

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

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

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

「agg」の具体例④|カラムに自作関数を適用する方法

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

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

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

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

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

lambda式(無名関数)については以下記事でも紹介しているので、良ければ参考にしてみてください。

さいごに

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

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

では今回はこのへんで。