前提・実現したいこと
pandasでグループごとの平均値を持ったカラムを高速に作りたいと思っています。
目的としては、機械学習を行っており、ターゲットエンコーディングのために特定のカラムの値ごとに目的変数の平均を求める処理をしています。
しかしその処理に結構時間がかかっており、多くのカラム(やその組み合わせ)に対してターゲットエンコーディングを行っているのもあって、試行錯誤をするためにできればより高速に実現したいと思っています。
現在は以下のようにgroupby()で平均値を求めてから元のデータフレームにmerge()するという方法を取っています。
python
1df_temp = df.groupby("集計変数")["目的変数"].mean().rename("平均目的変数").reset_index() 2df = pd.merge(df, df_temp, on="集計変数", how="left")
ただこの方法だとどうもmerge()が結構遅いなと思っています。
特に集計変数が1変数ではなく複数変数の組み合わせになっている場合は時間がかかっているように思います。
そのため、
①merge()を使わないで同じことを高速に実現する方法はあるか
②merge()自体を高速化する方法はあるか
の二点、もしくはどちらか一方でも、もしご存知の方がいらっしゃいましたら教えていただけないでしょうか。
どうぞよろしくお願いいたします。
(追記)
マシンスペックは以下の通りです。
OS:windows 10
CPU: Intel Core i7-9700K
メモリ: 16GB
GPU: NVIDIA GeForce RTX 2700 SUPER
開発環境: jupyter notebook
回答1件
あなたの回答
tips
プレビュー