pandasを使ってカテゴリごとにグルーピングし、平均や合計などを計算できます。
データのグルーピング
データセット
import pandas as pd
from sklearn.datasets import load_iris
iris_data = load_iris()
df = pd.DataFrame(
data = iris_data.data,
columns = iris_data.feature_names,
)
df["label"] = iris_data.target
df
load_irisのデータを使います。”label”は花の種類です。
groupby
df.groupby("label", as_index = False)["sepal length (cm)"].mean()
# ===== output =====
# 0 0 5.006
# 1 1 5.936
# 2 2 6.588
groupbyでグルーピングします。上記は”label”ごとに平均を計算しています。
as_indexはお好みで設定。Falseの方が見た目きれいです。
複数の集計を一括で実行
df.groupby("label", as_index = False)["sepal length (cm)"].agg(["min", "max"])
# ===== output =====
# 0 0 4.3 5.8
# 1 1 4.9 7.0
# 2 2 4.9 7.9
aggを使うと複数の集計方法で実行できます。
集計結果を列で追加
df["sepal_length_mean"] = df.groupby("label", as_index = False)["sepal length (cm)"].transform("mean")
df.head()
groupbyした後にtransformで集計をすると、各行に対して集計結果を出してくれます。
こうするとラベルごとの集計結果を特徴量としてそのまま結合できるので便利です。
まとめ
groupbyで集計をする方法を解説しました。
meanとかmin,max以外にもcount, head, uniqueなどの色々な操作ができるので、試してみてください。
コメント