概要
簡単に言うとマルチカラムをそもそもつくらないaggメソッド
です!
7月の頭にpandasのaggメソッドによって生じるマルチカラムをいい感じに処理する方法について紹介しましたが, pandasの0.25.0でそこに近い機能があったので紹介します!
使用するDataFrame
公式サイトと同じものを使います
import pandas as pd
animals = pd.DataFrame(
{
"kind": ["cat", "dog", "cat", "dog"],
"height": [9.1, 6.0, 9.5, 34.0],
"weight": [7.9, 7.5, 9.9, 198.0],
}
)
# kind height weight
# 0 cat 9.1 7.9
# 1 dog 6.0 7.5
# 2 cat 9.5 9.9
# 3 dog 34.0 198.0
今まで通りやってみる
今まで通りaggにキーに統計の対象となるカラム名, 値に統計の種類のリストを指定した辞書を渡します.
df_old = animals.groupby('kind').agg({"height": ['min', 'max'], 'weight': ['mean']})
# height weight
# min max mean
# kind
# cat 9.1 9.5 8.90
# dog 6.0 34.0 102.75
カラムがマルチカラムになっていますね.
新しくなったaggメソッド
新しくなったaggメソッドでは引数名に統計特徴量を計算した後につけたいカラム名, 引数に第1要素が統計の対象となるカラム名, 第2要素に統計の種類を指定したタプルを指定します.(言葉で見ると難しいから下のコードを見たほうがわかりやすいかも...)
df_new = animals.groupby("kind").agg(
min_height=("height", "min"),
height_max=("height", "max"),
hogehoge=("weight", "mean"),
)
# min_height height_max hogehoge
# kind
# cat 9.1 9.5 8.90
# dog 6.0 34.0 102.75
マルチカラムになっていないですね!
いいかんじ!
感じたこと
「新しくなったaggメソッドを使うようにすれば超ハッピー!」ということではないなぁと感じました.
kaggleとかでmin
もmax
もmean
もmedian
もvar
もskew
も, とにかくたくさん統計特徴量を作るんだ!という場合には今まで通りのやり方がやりやすいのかなと思いました.
ただ, 2, 3個の統計特徴量をつくるぜってときは新しいaggメソッドのやり方がお手軽にできていいなと感じました.
状況に応じて臨機応変に使っていきましょう!