Pandasでgroupbyなどの際に思わず発生するMultiIndex。
いやもちろん、思わず...ではなくて正規の仕様なのですが、しばらく間が空くと少し勘を取り戻すのに苦労する仕様な気がします。
まあ間が空いていても空いてなくても、私の場合、reset_index()してしまうのですが、そんな時に自らをかえりみるための、MultiIndexまわりの関数・スニペットメモです。
全部入り
# リネーム(実際は代入してください) df.rename_axis(index={'mon': 'M'}) df.index.rename(['Y', 'M', 'W']) # swaplevel(入れ替え) df.index.swaplevel('year', 'mon') df.index.swaplevel(0,1) # マルチインデックスから削除 df.index.droplevel('mon') # dfにもdroplevelがある。 # indexの値の変更 df.rename(index={2019:'19',2020:'20'},level='year') # reset_index df.reset_index('year')
ひとつずつ
サンプルデータ
In [204]: df Out[204]: num year mon week 2019 12 4 8 2020 1 1 38 2 32 3 10 4 22 2 1 10 2 15
typeを確認
In [205]: type(df.index) Out[205]: pandas.core.indexes.multi.MultiIndex
locで取得
In [206]: df.loc[(2019)] Out[206]: num mon week 12 4 8
値の確認
In [207]:df.index.names Out[207]: FrozenList(['year', 'mon', 'week'])
リネーム(実際は代入してください)
In [208]: df.rename_axis(index={'mon': 'M'}) Out[208]: num year M week 2019 12 4 8 2020 1 1 38 2 32 3 10 4 22 2 1 10 2 15 In [209]: df.index.rename(['Y', 'M', 'W']) Out[209]: MultiIndex([(2019, 12, 4), (2020, 1, 1), (2020, 1, 2), (2020, 1, 3), (2020, 1, 4), (2020, 2, 1), (2020, 2, 2)], names=['Y', 'M', 'W'])
swaplevel(入れ替え)
In [210]: df.index.swaplevel('year', 'mon') Out[210]: MultiIndex([(12, 2019, 4), ( 1, 2020, 1), ( 1, 2020, 2), ( 1, 2020, 3), ( 1, 2020, 4), ( 2, 2020, 1), ( 2, 2020, 2)], names=['mon', 'year', 'week']) In [211]: df.index.swaplevel(0,1) Out[211]: MultiIndex([(12, 2019, 4), ( 1, 2020, 1), ( 1, 2020, 2), ( 1, 2020, 3), ( 1, 2020, 4), ( 2, 2020, 1), ( 2, 2020, 2)], names=['mon', 'year', 'week'])
マルチインデックスから削除
In [212]:df.index.droplevel('mon') # dfにもdroplevelがある。 Out[212]: MultiIndex([(2019, 4), (2020, 1), (2020, 2), (2020, 3), (2020, 4), (2020, 1), (2020, 2)], names=['year', 'week'])
indexの値の変更
In [213]: df.rename(index={2019:'19',2020:'20'},level='year') Out[213]: num year mon week 19 12 4 8 20 1 1 38 2 32 3 10 4 22 2 1 10 2 15
reset_index
In [214]: df.reset_index('year') Out[214]: year num mon week 12 4 2019 8 1 1 2020 38 2 2020 32 3 2020 10 4 2020 22 2 1 2020 10 2 2020 15
リンク
MultiIndex
CookbookのMultiIndex関連
Cookbook — pandas 1.0.1 documentation