LoginSignup
4
6

More than 1 year has passed since last update.

groupby関数で出来たマルチカラムをいい感じにするTips

Last updated at Posted at 2021-07-03

やりたいこと

データ分析実務で、groupby関数を使ってあるカラムに対して複数の集約(mean,maxなど)を行っていると、マルチカラムとなってしまい、データが扱いにくくなることがあります。

たとえばこんなコード

df_receipt.groupby("customer_id").agg({"sales_date":["max", "min"]})

こんなの嫌だ・・・:disappointed_relieved:
スクリーンショット 2021-07-03 13.47.31.png

こんな感じにしたい…!:laughing:
スクリーンショット 2021-07-03 13.43.47.png

やり方

やり方は以下の4ステップ。

  1. マルチカラムとなっているカラム以外は、indexに退避(set_index関数)
  2. マルチカラム→シングルカラムにする(droplevel関数)
  3. 集約化されたカラムに、いい感じのprefix or suffix をつける(add_prefix or add_suffix関数)
  4. indexに退避していたカラムを元に戻す(reset_index関数)

groupby関数を使っていると、groupby対象カラムはindexとなるので、1.は要らない場合あり

コードサンプル

# 同じカラムで複数の集約を行うときはlistで表現
tmp = df_receipt.groupby("customer_id").agg({"sales_ymd":["max", "min"]})

# マルチカラムとなっているので削除
# droplevelの対象にしたくないカラムは、indexに退避させておくのがミソ
tmp.columns = tmp.columns.droplevel(0)

# カラム名を修正して、indexを戻してあげる
tmp = tmp.add_suffix("_sales_date").reset_index()

まとめ

groupby関数はデータ分析でよく使うので、どんどん仲良くなっていきたいですね:kissing_closed_eyes:

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6