【毎日Python】Pythonでデータの出現回数をクロス集計する方法|pandas.crosstab

crosstab
毎日Python/こつこつPython
import pandas as pd

Pythonで、データフレームから各値の出現回数をクロス集計する方法です。
使用するのは、Pythonのpandasライブラリのcrosstabメソッドです。
クロス集計とは、複数のカテゴリを掛け合わせて、合計値や平均値等を算出する集計方法のことです。

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

今回はこのようなデータフレームを用意します。

pd.crosstab(df['社員ID'], df['商品名'])

まず、pd.crosstabの第1引数に行、第2引数に列にしたいカラムを指定します。
実行します。
氏名ごとに商品名の出現回数を集計することができました。

pd.crosstab(df['社員ID'], [df['商品分類'], df['商品名']])

行または列に複数のカラムを指定すると、マルチインデックスとして取得することができます。
列に、商品分類と商品名を指定して実行します。
マルチインデックスとして、それぞれの出現回数を集計することができました。

pd.crosstab(df['社員ID'],  df['商品名'], margins=True)

取得した値の合計を取得することもできます。
引数にmargins=Trueを指定して実行します。
行と列それぞれの合計を集計することができました。

pd.crosstab(df['社員ID'], df['商品名'],df['売上金額'],aggfunc='sum')

また、引数aggfuncと要素を指定すると、出現回数以外の集計もできます。
合計値を集計する場合には、引数aggfuncにsumを指定します。
実行します。
社員IDごとの、商品名の売上金額を集計できました。
なお、他にクロス集計表を作成するメソッドで、pivot_tableメソッドがあります。
主な違いは、crosstabメソッドはデフォルトで出現回数を集計する点です。

関連メソッド

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