Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】Pandasデータフレームのマルチレベル列インデックスからレベルを削除する方法

マルチレベル列インデックスからレベルを削除する方法

Pandasのマルチレベル(階層型)列インデックスから特定のレベルを取り除くには、columns.droplevel()メソッドを使用します。引数に削除したいレベルの位置(0始まりの整数)やレベル名を渡すだけで、指定した階層を簡単に除去できます。なお、マルチインデックス自体はMultiIndex.from_tuples()を使うことで、タプルのリストから列方向に作成できます。

以下では、実際の手順に沿って、列インデックスのレベルを削除する流れを解説します。

ステップ1:列方向にマルチインデックスを作成する

まず、MultiIndex.from_tuples()で列用のインデックスを生成します。

items = pd.MultiIndex.from_tuples([('Col 1', 'Col 1', 'Col 1'), ('Col 2', 'Col 2', 'Col 2'), ('Col 3', 'Col 3', 'Col 3')])

ステップ2:マルチインデックス配列を作成し、データフレームを形成する

続いて、行側のマルチインデックスとなる配列を用意し、それをインデックスとして持つデータフレームを作成します。

arr = [
    np.array(['car', 'car', 'car', 'bike', 'bike', 'bike', 'truck', 'truck', 'truck']),
    np.array(['valueA', 'valueB', 'valueC', 'valueA', 'valueB', 'valueC', 'valueA', 'valueB', 'valueC'])
]

# マルチインデックスのデータフレームを生成
dataFrame = pd.DataFrame(np.random.randn(9, 3), index=arr, columns=items)

ステップ3:インデックスにラベルを付ける

各インデックスレベルに名前を付けておくと、データフレームの構造を把握しやすくなります。

dataFrame.index.names = ['level 0', 'level 1']

ステップ4:インデックス0のレベルを削除する

droplevel(0)を実行して最上位(0番目)のレベルを削除し、その結果を列に再代入します。

dataFrame.columns = dataFrame.columns.droplevel(0)

サンプルコード全体

ここまでの手順をまとめた完全なサンプルコードは以下の通りです。

import numpy as np
import pandas as pd

# 列方向のマルチインデックスを作成
items = pd.MultiIndex.from_tuples([('Col 1', 'Col 1', 'Col 1'), ('Col 2', 'Col 2', 'Col 2'), ('Col 3', 'Col 3', 'Col 3')])

# 行方向のマルチインデックス配列
arr = [
    np.array(['car', 'car', 'car', 'bike', 'bike', 'bike', 'truck', 'truck', 'truck']),
    np.array(['valueA', 'valueB', 'valueC', 'valueA', 'valueB', 'valueC', 'valueA', 'valueB', 'valueC'])
]

# マルチインデックスのデータフレームを生成
dataFrame = pd.DataFrame(np.random.randn(9, 3), index=arr, columns=items)

# インデックスにラベルを設定
dataFrame.index.names = ['level 0', 'level 1']
print("DataFrame...\n", dataFrame)

print("\nDropping a level...\n")
dataFrame.columns = dataFrame.columns.droplevel(0)

print("Updated DataFrame..\n", dataFrame)

実行結果

上記のコードを実行すると、次のような出力が得られます(乱数を使用しているため、数値は実行ごとに異なります)。

DataFrame...
                     Col 1     Col 2     Col 3
                     Col 1     Col 2     Col 3
                     Col 1     Col 2     Col 3
level 0  level 1
car      valueA    1.691127  0.315145 -0.695925
         valueB   -2.077182 -2.027643 -0.523965
         valueC    1.021402 -0.384421  0.640215
bike     valueA   -2.271217  0.197185  0.304847
         valueB    0.119615 -0.520491 -0.746547
         valueC    1.856888 -0.491540 -1.754604
truck    valueA    0.829854 -0.204102 -1.130511
         valueB    0.310692  0.119087 -0.244919
         valueC   -0.245934 -2.141639 -1.298278

Dropping a level...

Updated DataFrame..
                      Col 1     Col 2     Col 3
                      Col 1     Col 2     Col 3
level 0  level 1
car      valueA    1.691127  0.315145 -0.695925
         valueB   -2.077182 -2.027643 -0.523965
         valueC    1.021402 -0.384421  0.640215
bike     valueA   -2.271217  0.197185  0.304847
         valueB    0.119615 -0.520491 -0.746547
         valueC    1.856888 -0.491540 -1.754604
truck    valueA    0.829854 -0.204102 -1.130511
         valueB    0.310692  0.119087 -0.244919
         valueC   -0.245934 -2.141639 -1.298278

補足:droplevel()を使う際のポイント

  • 引数を省略した場合(droplevel())は、第0レベルが自動的に削除されます。
  • droplevel([0, 1])のようにリストを渡すことで、複数のレベルを一度に削除することも可能です。
  • レベルに名前が設定されている場合は、位置ではなくレベル名を指定して削除できます。
  1. Python Pandas入門:データフレームからマルチインデックスを作成する方法

    Pandasのデータフレーム(DataFrame)からマルチインデックス(MultiIndex)を作成するには、MultiIndex.from_frame() メソッドを使用します。このメソッドを使うと、既存のデータフレームの列をそのまま階層的なインデックスへと変換でき、多次元データの扱いが格段に便利になります。マルチインデックス作成の基本手順1. リストからなる辞書を用意するまず、サンプルデータとして車種と購入日を持つ辞書を作成します。d = {Car: [BMW, Lexus, Audi, Mercedes, Jaguar, Bentley], Date_of_purchase:

  2. 【Python】Pandas DataFrameからnull(欠損値)行を削除する方法|dropna()の使い方

    PandasのDataFrameからnull(NaN)行を削除するには、dropna()メソッドを使用します。この記事では、NaNを含むCSVファイルを読み込み、dropna()で欠損値を含む行を取り除くまでの手順を、サンプルコードと実行結果とともにわかりやすく解説します。前提:NaNを含むCSVファイル今回の例では、一部にNaN(null値)が含まれる以下のようなCSVファイル(CarRecords.csv)を使用します。手順1:read_csv()でCSVファイルを読み込むまずpandasをインポートし、read_csv()を使ってCSVファイルを読み込みます。ここではデスクトップ上に保存