【Python・Pandas】MultiIndexを並べ替える方法(sortlevelメソッド)
PandasでMultiIndex(マルチインデックス)を作成するには from_arrays() メソッドを使用します。さらに、作成したMultiIndexを並べ替えるには sortlevel() メソッドを使用します。
まず、必要なライブラリをインポートします。
import pandas as pd
MultiIndexとは、pandasオブジェクトに対して使用できる多階層(階層型)のインデックスオブジェクトです。まずは元となる配列を作成します。
arrays = [[2, 4, 3, 1], ['John', 'Tim', 'Jacob', 'Chris']]
names パラメータを指定すると、各インデックスレベルに名前を付けることができます。from_arrays() を使ってMultiIndexを作成しましょう。
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('ranks', 'student'))
続いて、MultiIndexを並べ替えます。引数を省略した場合、デフォルトでレベル0(最初の階層)を基準にソートされます。
print("\nSort MultiIndex...\n", multiIndex.sortlevel())
サンプルコード
ここまでの手順をすべてまとめたコードは以下の通りです。
import pandas as pd
# MultiIndexは、pandasオブジェクトのための多階層(階層型)インデックスです
# 配列を作成
arrays = [[2, 4, 3, 1], ['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を並べ替え
# デフォルトではレベル0を基準にソートされます
print("\nSort MultiIndex...\n", multiIndex.sortlevel())
実行結果
このコードを実行すると、次のような出力が得られます。
The Multi-index...
MultiIndex([(2, 'John'),
(4, 'Tim'),
(3, 'Jacob'),
(1, 'Chris')],
names=['ranks', 'student'])
The levels in Multi-index...
[[1, 2, 3, 4], ['Chris', 'Jacob', 'John', 'Tim']]
Sort MultiIndex...
(MultiIndex([(1, 'Chris'),
(2, 'John'),
(3, 'Jacob'),
(4, 'Tim')],
names=['ranks', 'student']), array([3, 0, 2, 1], dtype=int64))
補足:レベルや昇順・降順を指定する
sortlevel() には、ソート対象の階層を指定する level 引数と、昇順・降順を切り替える ascending 引数が用意されています。例えば、第2レベル(学生名)を基準に降順でソートしたい場合は、次のように記述します。
multiIndex.sortlevel(level=1, ascending=False)
-
PandasのマルチインデックスDataFrameでgroupbyを実行する方法
マルチインデックスDataFrameとは、複数のインデックス(階層的なインデックス)を持つデータフレームのことです。本記事では、マルチインデックス化されたDataFrameに対してgroupbyを使用し、特定のレベルごとに集計を行う方法を解説します。サンプルデータの準備まず、デスクトップに保存された以下のようなCSVファイル(sales.csv)を用意します。車種(Car)、地域(Place)、販売台数(UnitsSold)のデータが含まれています。最初に、pandasライブラリをインポートし、CSVファイルを読み込みます。import pandas as pd df = pd.read_c
-
Pythonで辞書(dict)を値で並べ替える方法【OrderedDictとsorted()活用】
Pythonで辞書を値順にソートする基本の考え方 Pythonの標準ライブラリには、高性能なコンテナデータ型を提供する collections モジュールが含まれています。その中の OrderedDict は辞書型のサブクラスで、要素が追加された順序を記憶できるのが特徴です。通常の dict もPython 3.7以降は挿入順を保持しますが、明示的に順序を扱いたい場面では OrderedDict が便利です。 OrderedDict をイテレートすると、キーが最初に追加された順序どおりにアイテムが返されます。 OrderedDictの基本的な使い方 >>> from coll