pandas

【Pandas】マルチインデックスの特定のインデックス列を削除する【Python】

MAX

MultiIndexは複数の列がインデックスに指定されている状態だが、状況次第では特定の列をインデックスから除外したい場合もある。

スポンサーリンク

データ準備

マルチインデックスとなるデータを作成する。

1import pandas as pd
2
3# MultiIndexを持つDataFrameを作成する。
4arrays = [['A', 'A', 'B', 'B'], [1, 2, 1, 2]]
5index = pd.MultiIndex.from_arrays(arrays, names=('letters', 'numbers'))
6df = pd.DataFrame({'data': [11, 22, 33, 44]}, index=index)
7print(df)
8#                  data
9# letters numbers      
10# A       1          11
11#         2          22
12# B       1          33
13#         2          44

インデックスにlettersとnumbersという列を指定。

マルチインデックスの特定のインデックス列を削除

numbersをインデックスから削除する。(ついでにDataFrameからも削除する)。

numbersはMultiIndexに入っているので、そのままではdropで削除できないため、reset_indexでインデックスから除外する。

reset_indexのlevelに対象のインデックス列名を指定することで、その列のみをインデックスから除外できる。

1# インデックスを解除。levelにnumbersを指定することでnumbersだけをindexから解除する。
2df_reset = df.reset_index(level='numbers')
3
4# 'numbers' 列を削除
5df_reset.drop(columns='numbers', inplace=True)
6
7print(df_reset)
8#          data
9# letters      
10# A          11
11# A          22
12# B          33
13# B          44
14
15# indexが1列になったので、MultiIndexではなくIndexになる。
16print(df_reset.index)
17# Index(['A', 'A', 'B', 'B'], dtype='object', name='letters')

DataFrameのインデックスには元々lettersとnumbersの2種類が設定されていたのでMultiIndexになっていたが、numbersをインデックスから削除することでインデックスがlettersだけになった。

そのため型もMultiIndexからIndexに自動的に変わる。

スポンサーリンク
ABOUT ME
MAX
MAX
ITエンジニア、データサイエンティスト
新卒でSIerに入社し、フリーランスになってWEB系へ転向。
その後AIの世界へ足を踏み入れ、正社員に戻る。 テーブルデータの分析がメイン。
スポンサーリンク
記事URLをコピーしました