Pandas groupby カウント
-
一意な行値のカウント値を指定するメソッド
Series.value_counts()
を用いて -
DataFrame.groupby()
関数を用いた DataFrame グループの値のカウント -
pandas.DataFrame.agg()
メソッドを用いて各グループの複数の統計値を取得する
このチュートリアルでは、DataFrame.groupby()
メソッドを使用して取得したグループについて、count
、sum
、max
などの統計情報を取得する方法を説明します。
上の例で示した automobile_data_df
を使って概念を説明します。DataFrame は従業員と、その従業員が使用している車や自転車のブランドから構成されています。
import pandas as pd
automobile_data = [
["Chevrolet", "Yamaha"],
["Toyota", "Ducati"],
["Volkswagen", "BMW"],
["Cherlovet", "Kawasaki"],
["Toyota", "Ducati"],
["Toyota", "BMW"],
["Volkswagen", "BMW"],
]
column_names = ["Car Brand", "Motorbike Brand"]
index_names = ["Steven", "Robert", "Jimmy", "Mike", "Phoenix", "Scott", "John"]
automobile_data_df = pd.DataFrame(
automobile_data, index=index_names, columns=column_names
)
print(automobile_data_df)
出力:
Car Brand Motorbike Brand
Steven Chevrolet Yamaha
Robert Toyota Ducati
Jimmy Volkswagen BMW
Mike Cherlovet Kawasaki
Phoenix Toyota Ducati
Scott Toyota BMW
John Volkswagen BMW
一意な行値のカウント値を指定するメソッド Series.value_counts()
を用いて
DataFrame 内の単一カラムの一意な値のカウントを取得したい場合は、Series.value_count()
メソッドを使用します。
import pandas as pd
automobile_data = [
["Chevrolet", "Yamaha"],
["Toyota", "Ducati"],
["Volkswagen", "BMW"],
["Cherlovet", "Kawasaki"],
["Toyota", "Ducati"],
["Toyota", "BMW"],
["Volkswagen", "BMW"],
]
column_names = ["Car Brand", "Motorbike Brand"]
index_names = ["Steven", "Robert", "Jimmy", "Mike", "Phoenix", "Scott", "John"]
automobile_data_df = pd.DataFrame(
automobile_data, index=index_names, columns=column_names
)
print(automobile_data_df["Car Brand"].value_counts())
出力:
Toyota 3
Volkswagen 2
Cherlovet 1
Chevrolet 1
Name: Car Brand, dtype: int64
このメソッドは automobile_data_df
の Car Brand
カラムにあるすべての一意な値をカウントとともに出力します。このメソッドは、一度にひとつのカラムだけの値のカウントを見たい場合にのみ適用されます。
DataFrame.groupby()
関数を用いた DataFrame グループの値のカウント
関数 DataFrame.groupby()
を用いて DataFrame を複数のグループに分割し、size()
メソッドを用いて各グループの値をカウントします。
import pandas as pd
automobile_data = [
["Chevrolet", "Yamaha"],
["Toyota", "Ducati"],
["Volkswagen", "BMW"],
["Cherlovet", "Kawasaki"],
["Toyota", "Ducati"],
["Toyota", "BMW"],
["Volkswagen", "BMW"],
]
column_names = ["Car Brand", "Motorbike Brand"]
index_names = ["Steven", "Robert", "Jimmy", "Mike", "Phoenix", "Scott", "John"]
automobile_data_df = pd.DataFrame(
automobile_data, index=index_names, columns=column_names
)
group = automobile_data_df.groupby(["Car Brand", "Motorbike Brand"])
print(group.size().reset_index(name="counts"))
出力:
Car Brand Motorbike Brand counts
0 Cherlovet Kawasaki 1
1 Chevrolet Yamaha 1
2 Toyota BMW 1
3 Toyota Ducati 2
4 Volkswagen BMW 2
これは、automobile_data_df
の Car Brand
と Motorbike Brand
のカラムの値のユニークな組み合わせと、automobile_data_df
DataFrame 内でのこれらの組み合わせの出現回数をまとめた DataFrame を出力します。
groupby()
メソッドは automobile_data_df
をグループに分割します。Car Brand
と Motorbike Brand
のカラムの値が同じ行は同じグループに配置されます。size()
メソッドで各グループの値の数を取得し、最後に各グループの値の数から DataFrame を生成します。
pandas.DataFrame.agg()
メソッドを用いて各グループの複数の統計値を取得する
import pandas as pd
automobile_data = [
["Chevrolet", "Yamaha", 4000],
["Toyota", "Ducati", 5000],
["Volkswagen", "BMW", 4500],
["Cherlovet", "Kawasaki", 3800],
["Toyota", "Ducati", 4500],
["Toyota", "BMW", 5000],
["Volkswagen", "BMW", 6000],
]
column_names = ["Car Brand", "Motorbike Brand", "Monthly Salary"]
index_names = ["Steven", "Robert", "Jimmy", "Mike", "Phoenix", "Scott", "John"]
automobile_data_df = pd.DataFrame(
automobile_data, index=index_names, columns=column_names
)
group = automobile_data_df.groupby(["Car Brand", "Motorbike Brand"])
print(group.agg({"Monthly Salary": [min, max, sum]}))
出力:
Monthly Salary
min max sum
Car Brand Motorbike Brand
Cherlovet Kawasaki 3800 3800 3800
Chevrolet Yamaha 4000 4000 4000
Toyota BMW 5000 5000 5000
Ducati 4500 5000 9500
Volkswagen BMW 4500 6000 10500
生成されたグループごとに Monthly Salary
の最小値、最大値、合計値を表示します。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn