Python Pandas – MultiIndexのレベルを列としてDataFrameを作成する方法
MultiIndexの各レベルを列として持つDataFrameを作成するには、Pandasのto_frame()メソッドを使用します。このメソッドを使うことで、階層的なインデックス情報をそのまま表形式のデータへ変換できます。
必要なライブラリのインポート
まず、必要なライブラリをインポートします。
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'))
続いて、to_frame()メソッドを使って、MultiIndexのレベルを列とするDataFrameを作成します。
dataFrame = multiIndex.to_frame()
完全なコード例
以下に全体のコードを示します。
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)
# to_frame()でMultiIndexのレベルを列とするDataFrameを作成
dataFrame = multiIndex.to_frame()
# DataFrameを表示
print("\nThe DataFrame...\n", dataFrame)
実行結果
上記のコードを実行すると、以下のような出力が得られます。
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']]
The DataFrame...
ranks student
ranks student
1 John 1 John
2 Tim 2 Tim
3 Jacob 3 Jacob
4 Chris 4 Chris
出力を見ると、MultiIndexの「ranks」と「student」という2つのレベルが、それぞれDataFrameの列として展開されていることがわかります。また、levels属性を参照すると、各レベルの一意な値のリストを確認できます。
補足:インデックスを残さずにDataFrame化する
デフォルトでは、to_frame()は元のMultiIndexを行インデックスとして保持したままDataFrameを生成します。インデックスを列データだけにしたい場合は、index=Falseを指定します。
dataFrame = multiIndex.to_frame(index=False)
これにより、「ranks」と「student」のみを列として持つ、すっきりしたDataFrameが得られます。用途に応じて使い分けると便利です。
-
Python Pandas入門:query()メソッドでDataFrameの列をクエリ(条件抽出)する方法
PandasのDataFrameで列をクエリ(条件による絞り込み)を行うには、query()メソッドを使用します。query()は、文字列形式の条件式を渡すだけで直感的にレコードをフィルタリングできる便利な機能です。 サンプルDataFrameの作成 まず、商品名・期首在庫・期末在庫を持つDataFrameを作成してみましょう。 import pandas as pd dataFrame = pd.DataFrame({ Product: [SmartTV, PenDrive, Speaker, Earphone], Opening_Stock: [300, 700, 1
-
【Python】Pandasのreplace()メソッドでDataFrameの値を別のDataFrameの値に置き換える方法
Pandasでは、replace()メソッドを使うことで、あるDataFrameの値を別のDataFrameから取得した値に簡単に置き換えることができます。この記事では、2つのDataFrameを作成し、片方の値をもう片方の値で置き換える手順を、サンプルコードと実行結果とともにわかりやすく解説します。 基本的な流れ まず、元となる1つ目のDataFrameを作成します。 dataFrame1 = pd.DataFrame({Car: [Audi, Lamborghini], Place: [US, UK], Units: [200, 500]}) 次に、置き換え先となる2つ目のDataFram