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

Python Pandas – MultiIndexでレベルを設定する方法(set_levelsの使い方)

PandasのMultiIndexでレベルを設定(変更)するには、MultiIndex.set_levels()メソッドを使用します。このメソッドを使うことで、既存のマルチインデックスの各レベルに新しい値を割り当てることができます。

必要なライブラリのインポート

まず、必要なライブラリをインポートします。

import pandas as pd

MultiIndexとは

MultiIndexは、Pandasオブジェクトに対して使用できる多次元(階層的)なインデックスオブジェクトです。単一のインデックスでは表現できない複雑なデータ構造を、複数のレベルで整理して扱うことができます。

配列の作成

まず、インデックスのもととなる配列を作成します。ここでは数値の配列と文字列の配列を用意します。

arrays = [[1, 2, 3, 4], ['John', 'Tim', 'Jacob', 'Chris']]

from_arrays()でMultiIndexを作成

「names」パラメータを使用すると、各インデックスレベルに名前を付けることができます。from_arrays()メソッドは、配列からMultiIndexを生成するために使われます。

multiIndex = pd.MultiIndex.from_arrays(arrays, names=('ranks', 'student'))

set_levels()で新しいレベルを設定

次に、set_levels()メソッドを使って、MultiIndexに新しいレベルを設定します。第1レベルには文字列「p」「q」「r」「s」を、第2レベルには数値10〜40を割り当てています。

print("\nSet new levels in Multi-index...\n", multiIndex.set_levels([['p', 'q', 'r', 's'], [10, 20, 30, 40]]))

サンプルコード全体

以下が完全なサンプルコードです。

import pandas as pd

# MultiIndexはPandasオブジェクト用の多階層インデックスオブジェクト
# 配列を作成
arrays = [[1, 2, 3, 4], ['John', 'Tim', 'Jacob', 'Chris']]

# 「names」パラメータで各インデックスレベルに名前を設定
# from_arrays()でMultiIndexを作成
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('ranks', 'student'))

# MultiIndexを表示
print("The Multi-index...\n", multiIndex)

# MultiIndexのレベルを取得
print("\nThe levels in Multi-index...\n", multiIndex.levels)

# MultiIndexに新しいレベルを設定
print("\nSet new levels in Multi-index...\n", multiIndex.set_levels([['p', 'q', 'r', 's'], [10, 20, 30, 40]]))

実行結果

上記のコードを実行すると、以下のような出力が得られます。

The Multi-index...
MultiIndex([(1,  'John'),
            (2,   'Tim'),
            (3, 'Jacob'),
            (4, 'Chris')],
            names=['ranks', 'student'])

The levels in Multi-index...
   [[1, 2, 3, 4], ['Chris', 'Jacob', 'John', 'Tim']]

Set new levels in Multi-index...
MultiIndex([('p', 30),
            ('q', 40),
            ('r', 20),
            ('s', 10)],
            names=['ranks', 'student'])

ポイント解説

  • levels属性:現在設定されている各レベルの値の一覧を取得できます。出力を見ると、値がソートされて表示されていることが分かります。
  • set_levels()の動作:新しいレベルの値は、位置ではなくラベル(コード)に基づいて対応付けられます。そのため、出力結果では元の順序と異なる組み合わせ(例えば ('p', 30))になっています。
  • 注意点set_levels()は元のMultiIndexを変更せず、新しいMultiIndexを返します。変更を保持したい場合は、戻り値を変数に代入してください。
  1. Pythonのset(集合)におけるcopy()メソッドの使い方

    はじめに このチュートリアルでは、Pythonのset(集合)データ構造が持つcopy()メソッドについて詳しく解説します。 copy()メソッドは、setの浅いコピー(シャローコピー)を取得するために使用されます。 ここでは、「通常のコピー」と「浅いコピー」の違いを、具体的なサンプルコードを通して理解していきましょう。 通常のコピー(代入)の挙動 まず、以下の手順に沿ってコードを実行し、出力結果を確認してみてください。 setを初期化する 代入演算子「=」を使って、別の変数にsetを代入する コピー先のsetに新しい要素を追加する 両方のsetを出力する 実行すると、両者に違いがないこと

  2. Pythonのset型add()メソッドの使い方をわかりやすく解説

    はじめにこのチュートリアルでは、Pythonのset(集合)データ構造で使えるaddメソッドについて詳しく解説します。それでは、さっそく見ていきましょう。set(集合)は、重複しない一意な要素だけを格納できるデータ構造です。addメソッドを使うことで、引数に指定した要素をセットへ追加することができます。要素を追加する基本の手順まず、セットを初期化します。addメソッドを使って、新しい要素をセットに追加します。更新後のセットを出力して結果を確認します。サンプルコード# セットの初期化numbers_set = {1, 2, 3, 4, 4, 5}# addメソッドで要素を追加numbers_se