pandasで階層型インデックスを活用!multiindex columnsの使い方

はじめに:pandasで階層型インデックス(multiindex columns)を使うメリット

Pythonのデータ解析ライブラリpandasは、データの集計やフィルタリングなどを容易にする機能があります。その中でも、階層型インデックスを使うことで、複雑なデータ操作が簡単になります。multiindex columnsを使えば、データフレームの列を複数の階層に分けて管理することができます。これにより、多次元のデータに対して、集計やフィルタリングを効率的に行うことができます。

multiindex columnsの作成方法:基本操作と構築手順

まずは、multiindex columnsの作成方法について解説します。データフレームに複数の階層を持つ列を作成するには、以下のような手順が必要です。

  1. データフレームを作成する。
  2. 列のタプルを作成する。
  3. 列のタプルを指定して、multiindex columnsを作成する。

以下の例では、2つの階層を持つmultiindex columnsを作成します。

import pandas as pd
# データフレームを作成する
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})

# 列のタプルを作成する
columns = [('Group 1', 'A'), ('Group 1', 'B'), ('Group 2', 'C')]

# multiindex columnsを作成する
df.columns = pd.MultiIndex.from_tuples(columns)
print(df)

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

  Group 1     Group 2
         A  B         C
0        1  4         7
1        2  5         8
2        3  6         9

これで、multiindex columnsを持つデータフレームが作成できました。

multiindex columnsを活用したデータフレームの操作

multiindex columnsを使うことで、データフレームの操作がより柔軟になります。例えば、特定の階層の列を抽出したり、複数の列をまとめて集計することができます。

特定の階層の列を抽出する

特定の階層の列を抽出するには、以下のように列のタプルの要素を指定します。

import pandas as pd
# データフレームを作成する
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
columns = [('Group 1', 'A'), ('Group 1', 'B'), ('Group 2', 'C')]
df.columns = pd.MultiIndex.from_tuples(columns)

# 特定の階層の列を抽出する
group_1 = df['Group 1']
print(group_1)

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

   A  B
0  1  4
1  2  5
2  3  6

このように、指定した階層の列だけを抽出することができます。

複数の列をまとめて集計する

複数の列をまとめて集計するには、以下のように列のタプルの要素を指定します。

import pandas as pd
# データフレームを作成する
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
columns = [('Group 1', 'A'), ('Group 1', 'B'), ('Group 2', 'C')]
df.columns = pd.MultiIndex.from_tuples(columns)

# 複数の列をまとめて集計する
sum_group_1 = df['Group 1'].sum(axis=1)
print(sum_group_1)

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

0     5
1     7
2     9
dtype: int64

このように、指定した階層の複数の列をまとめて集計することができます。

multiindex columnsでのデータの集計やフィルタリング方法

multiindex columnsを使ったデータフレームの集計やフィルタリング方法を解説します。

階層ごとのデータの集計

階層ごとにデータを集計するには、以下のようにgroupbyメソッドを使います。

import pandas as pd

# データの作成
data = {
('A', 'X'): [1, 2, 3, 4],
('A', 'Y'): [5, 6, 7, 8],
('B', 'X'): [9, 10, 11, 12],
('B', 'Y'): [13, 14, 15, 16],
}
df = pd.DataFrame(data, index=['W', 'X', 'Y', 'Z'])

# 階層ごとに集計
grouped = df.groupby(level=0, axis=1).sum()

# 結果を表示
print(grouped)

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

    A   B
W   6  22
X   8  24
Y  10  26
Z  12  28

このように、階層ごとにデータを集計することができます。

特定の階層の値でフィルタリングする

特定の階層の値でフィルタリングするには、以下のようにlocメソッドを使います。

import pandas as pd
# データフレームを作成する
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
columns = [('Group 1', 'A'), ('Group 1', 'B'), ('Group 2', 'C')]
df.columns = pd.MultiIndex.from_tuples(columns)

# 特定の階層の値でフィルタリングする
group_1_2 = df.loc[:, ('Group 1', 'A')]
print(group_1_2)

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

0    1
1    2
2    3
Name: (Group 1, A), dtype: int64

このように、指定した階層の値でデータをフィルタリングすることができます。

まとめ:pandas multiindex columnsを活用したデータ操作のポイント

multiindex columnsを使うことで、データの集計やフィルタリングなどがより柔軟に行えます。以下は、multiindex columnsを活用したデータ操作のポイントです。

  • 列のタプルを作成し、pd.MultiIndex.from_tuplesメソッドでmultiindex columnsを作成する。
  • locメソッドで特定の階層の値でフィルタリングする。
  • groupbyメソッドで階層ごとにデータを集計する。

これらのポイントを押さえて、multiindex columnsを活用したデータ操作を行いましょう。