目次
MultiIndexによる多階層データの管理
Pandasでは、行インデックスに複数の階層を持たせる「MultiIndex」を使用することで、複雑な構造を持つデータを効率的に整理できます。例えば、「支店名」とその下の「部署名」といった親子関係にあるデータを一つのデータフレームで管理する場合に非常に有効です。
MultiIndexを持つデータフレームの構築
まず、地域名と店舗名の2層構造を持つインデックスを作成し、それに基づいた売上と来店客数のデータフレームを用意します。
import pandas as pd
# インデックス階層の定義(地域、店舗名)
index_structure = [
("East", "Store_A"),
("East", "Store_B"),
("West", "Store_C"),
("West", "Store_D"),
("South", "Store_E"),
("South", "Store_F")
]
# マルチインデックスの生成
m_index = pd.MultiIndex.from_tuples(index_structure, names=["Region", "Branch"])
# 統計データの定義(売上、客数)
store_stats = {
"Sales_Amount": [850000, 920000, 780000, 880000, 650000, 710000],
"Customer_Count": [450, 510, 390, 480, 320, 350]
}
# インデックスを適用してDataFrameを作成
df = pd.DataFrame(store_stats, index=m_index)
print("--- 作成したマルチインデックス・データフレーム ---")
print(df)
locを使用したデータの抽出方法
マルチインデックスが設定されたデータフレームでは、loc 属性を使用して特定の階層や特定の行を抽出します。
特定の階層(第1レベル)の抽出
第1階層(上位階層)のラベルを指定することで、そのカテゴリに属するすべてのデータを取得できます。
# 「East」地域のデータをすべて抽出
east_region_data = df.loc["East"]
print("\n--- East地域のデータ抽出結果 ---")
print(east_region_data)
特定の行(全階層指定)の抽出
特定の1行をピンポイントで取得したい場合は、インデックスの各階層をタプル形式で指定します。
# 「East」地域の「Store_A」のデータを抽出
target_store = df.loc[("East", "Store_A")]
print("\n--- East地域 Store_A の個別データ ---")
print(target_store)
実行結果
上記のコードを実行すると、階層構造に基づいた正確なデータ抽出が行われます。
--- 作成したマルチインデックス・データフレーム ---
Sales_Amount Customer_Count
Region Branch
East Store_A 850000 450
Store_B 920000 510
West Store_C 780000 390
Store_D 880000 480
South Store_E 650000 320
Store_F 710000 350
--- East地域のデータ抽出結果 ---
Sales_Amount Customer_Count
Branch
Store_A 850000 450
Store_B 920000 510
--- East地域 Store_A の個別データ ---
Sales_Amount 850000
Customer_Count 450
Name: (East, Store_A), dtype: int64
抽出時の注意点
loc で上位階層のみを指定した場合、返される結果は指定した階層が削除された新しいデータフレームとなります。一方で、タプルを用いてすべての階層を指定した場合は、その行の各カラムの値を保持した Series オブジェクトが返されます。このように抽出レベルによって返り値の型が変わる特性を理解することで、柔軟なデータ操作が可能になります。
