【毎日Python】Pythonでデータフレームを指定しカラムごとに集計する方法|DataFrame.groupby

【毎日Python】Pythonでデータフレームを指定しカラムごとに集計する方法|DataFrame.groupby
import pandas as pd

Pythonで指定のカラムごとにデータを集計する方法です。
使用するのは、Pythonのpandasライブラリのgroupbyメソッドです。
groupbyメソッドは単独で使用するのではなく、sumやmean等といったメソッドと組み合わせて使用します。

df = pd.read_csv('/content/sample.csv')
df

今回はこちらのcsvファイルのデータを使って試してみます。

df.groupby('商品名').size()

まず、商品名ごとの要素の個数を取得してみます。
.sizeで実行します。
商品名ごとに要素の個数を取得できました。

df.groupby('商品分類').sum()

次に、商品分類ごとに合計を算出してみましょう。
合計の場合にはsumで実行します。
商品分類ごとの合計を取得することができました。

df[['商品分類','社員ID','売上金額']].groupby(['商品分類','社員ID']).mean()
#df.groupby(['商品名','社員ID']).max()
pd.options.display.float_format = '{:.0f}'.format

カラムを複数指定することもできます。
商品分類、社員ID、売上金額のデータフレームを作って、商品分類と社員IDごとに集計してみましょう。
実行します。
社員IDと商品分類ごとの売上金額の平均を集計できました。
ただ、小数点以下も表示されてしまっているので、小数点以下を切り捨てにします。
このように、formatメソッドを使用して、小数点以下を0にします。
実行したら、こちらのコードを再度実行してみます。
小数点以下を切り捨てて、売上金額の平均を表示することができました。

df[['社員ID','売上金額']].groupby('社員ID', as_index=False).max()
#df.groupby('商品名', as_index=False).sum()

なお、カラムをインデックスに指定したくない場合には、groupbyの第二引数にas_index=Falseを指定します。
社員IDと売上金額のデータフレームを作って、社員IDごとに売上金額の最大値を集計します。
実行します。
インデックスを数字に指定することができました。

関連メソッド

【毎日Python】Pythonでデータフレームからピボットテーブルを作成する方法|DataFrame.pivot_table

【毎日Python】Pythonでデータフレームをカラムごとに集計する方法|DataFrame.agg