結論
pd.MultiIndex.from_tuples() でタプルからMultiIndexを作成する。
df.index = pd.MultiIndex.from_tuples(tupled_index)
MultiIndexは「階層的なIndex」を表す
連続数字や日付などさまざまなデータをインデックスにできるPandaのIndexですが、複数の列(または行)を行名として指定できるのがMultiIndexです。
1つの行に対して、複数のIndexが貼られているイメージですね。
このメリットはデータを特定しやすくすること。
少ないデータだったら単一のIndexで上手く処理できますが、巨大なデータセットとなると前処理だけでも大変な時間がかかります。
そこで、あらかじめ1つの行に対し複数のラベルを付けておくことで比較的扱いやすくなるかもしれません。
タプルから階層的なIndexを作成する
具体的な例で見てみましょう。
データは適当にランダムに生成します。
data = np.random.randn(10)
df = pd.DataFrame(data)
print(df)
# 0
# 0 -0.965032
# 1 1.498792
# 2 -1.087072
# 3 -0.581198
# 4 -0.242347
# 5 -1.685222
# 6 -0.871249
# 7 -1.542947
# 8 -0.259282
# 9 0.762048
この段階ではデフォルトで、連続整数のIndex(RangeIndex)が自動で設定されています。
ここで目的の多層階層的なIndexを設定してみます。
タプルのリスト(list)をpd.MultiIndex.from_tuples()関数に渡してあげてIndexオブジェクトを取得し、それをdf.indexに指定します。
# 10行分のデータに合わせてインデックスを指定
tupled_index = [
('alpha', 'foo'),
('alpha', 'bar'),
('alpha', 'baz'),
('beta', 'foo'),
('beta', 'bar'),
('beta', 'baz'),
('gumma', 'foo'),
('gumma', 'foo'),
('gumma', 'bar'),
('gumma', 'baz'),
]
df.index = pd.MultiIndex.from_tuples(tupled_index)
print(df)
# 0
# alpha foo -0.965032
# bar 1.498792
# baz -1.087072
# beta foo -0.581198
# bar -0.242347
# baz -1.685222
# gumma foo -0.871249
# foo -1.542947
# bar -0.259282
# baz 0.762048
階層的なインデックスが生成されました。
Pythonの学習法について
Python の勉強が辛くなっていませんか?
Pythonは比較的取り組みやすい言語と言われていますが、プログラミング初心者にとっては分からないことだらけ。
ゼロから独学で勉強するのは厳しい道のりです。
今回、様々な現場、システム、言語を経験してきた現役エンジニアの立場から、初心者でも挫折しない学習方法を解説する記事を書きました。もちろん、お金をかけずに習得できる方法も解説しています。
できるだけストレスがかからない勉強法を解説しているので、ぜひ参考にしてみてくださいね。