Pandasのマルチインデックス(マルチカラム)解除方法

Pandasマルチインデックス解除方法

Pandasのピボットテーブルなどのデータ加工をするとマルチインデックス(マルチカラム)になる時があります。データ加工難易度を下げるために、マルチインデックスを解除しデータを連結しながら進めていくことが多いと思います。

本記事では、意図せずマルチインデックス化されてしまったPandasのDataframeにおいて、マルチインデックスを解除する方法をご紹介いたします。

目次

Pandaインデックスをリセットする方法

必用ライブラリ

import pandas as pd

Samleファイルの読み込み

約2,000件のサンプルファイルを読み込みます。

input_csv=r"C:\Users\abi00\デスクトップ\商品情報2000件.csv"

df1=pd.read_csv(input_csv)

df1

dfの結果は下記

インデックスを解除する(reset_index)

Pandasのピボットテーブル機能を利用して、データ階層を変えて表示します。その後、階層を合わせるためにインデックスを振りなおす処理をご紹介します。

df2=df1.pivot_table(index="カテゴリーID",values="在庫金額",aggfunc="sum")
df2

df2の結果を見ると「カテゴリID」と「在庫金額」の階層が違うことがわかります。階層レベルを合わせるにはインデックスをリセットして振りなおす必要があります(下記)

pandasのpivotを利用してマルチインデックスに変化した様子

Pandasでインデックスを解除するにはreset_index()を使い、インデックスを振りなおすことで項目名の行にカテゴリIDと在庫金額を並べることができます。

df2.reset_index()

reset_index()を行ったことで、「カテゴリーID」と「在庫金額」が同じ階層(項目名)として表示されました。

データが整備されたことでこの後のデータ加工がしやすくなります。

pandasのpivotを利用してマルチインデックスを解除した様子

Pandasでマルチインデックスを解除する方法

マルチインデックスのデータを作成します。(下記)

df3=df1.pivot_table(index=["カテゴリーID","原価","在庫金額"],values="個数",aggfunc="count")
df3

df3のデータを表示します。インデックスには「”カテゴリーID”,”原価”,”在庫金額”」の順番に並んでいます。

マルチインデックス作成

マルチインデックスを解除するにはdf.index=df.index.droplevel(0)を利用します。()内の数値はレベルを示しており、数値を変えることで、どのインデックスを削除するか指定することができます。下記で0,1を削除した例を示します。

df3.index=df3.index.droplevel(0)
df3

df3.index=df3.index.droplevel(1)
df3

df3.index.droplevel(0)

マルチインデックスを解除した様子

df3.index.droplevel(1)

マルチインデックスを解除した様子

Pandasでマルチカラムを解除する方法

ピボットテーブルで値などを複数選択するとマルチインデックスになります。

df2=df1.pivot_table(index="カテゴリーID",values=["個数","在庫金額"],aggfunc=["count","sum"])

項目を見るとcount,sumと個数、在庫の項目が階層違いであることがわかります。

このDataを個数、在庫金額に統一する方法をご紹介します。

pandasのpivotを利用してマルチカラムが発生した様子

Pandasでマルチカラムを削除するにはcolumns.droplevel()を利用します。()内には削除するカラムレベルを設定します。下記例では0と1を入れて結果を並べてみました(下図)

#レベル0のカラム削除
df2.columns=df2.columns.droplevel(0)

#レベル1のカラム削除
df2.columns=df2.columns.droplevel(1)

df.columns.droplevel(0)

df.columns.droplevel(0)で0マルチカラムを解除

df.columns.droplevel(1)

df.columns.droplevel(1)で0マルチカラムを解除

df2.columns.droplevel(0)でマルチカラムを解除したデータにたいして、インデックスをリセットした例が下記です。

カテゴリId~在庫金額までが項目名として1行に並びました。個数、在庫金額に関しては名称が重複すうのでリネームで好きな名前に変換すればよいでしょう。

pandasのpivotを利用してマルチカラムとインデックスをリセットした様子
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

著者:ブロガー2つ(につ)

■サイト設立目的
人海戦術の時代からテクノロジー活用による自動化促進の時代に変化。テクノロジー活用を促進するための情報共有やテクノロジー支援を行います。

目次