Python Tech

Python Pandas タプルから階層的なインデックスを生成する方法

結論

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は比較的取り組みやすい言語と言われていますが、プログラミング初心者にとっては分からないことだらけ。

ゼロから独学で勉強するのは厳しい道のりです。

今回、様々な現場、システム、言語を経験してきた現役エンジニアの立場から、初心者でも挫折しない学習方法を解説する記事を書きました。もちろん、お金をかけずに習得できる方法も解説しています。

できるだけストレスがかからない勉強法を解説しているので、ぜひ参考にしてみてくださいね。

 

今回参考にした資料

pandas.MultiIndex.from_tuples — pandas 1.3.2 documentation

PandasのMultiIndexについて理解する – DeepAge

  • この記事を書いた人

次世代ペンギン

長いのでペンギンとお呼びください。システム開発・プログラミングのお仕事をしています。甘味とコーヒーは生命線。多くの人に役立つ情報のシェアが目標です。

人気の記事

1

会社員でプログラマーとして働いている人、インフラやネットワークのエンジニアとして働いている人の中には、フリーランスのプログラマーとして独立、もしくは転向したい人もいるので ...

2

キャリアアップのため、または高収入を目指して、しっかりプログラミングを学びたいという人が増えてきましたね。 この記事では現役のエンジニアである私が、実際に仕事で稼げるよう ...

3

フリーランスのプログラマーにとって収入の向上に最も直結するのはスキルです。 必要なスキル、スキルの獲得方法が気になる人も多いでしょう。 また、これからフリーランスを目指す ...

4

Vuetifyの v-progress-circular コンポーネントは、数値データや処理状況を環状(円状)のデザインで教えてくれるUIデザインです。 ローディングのス ...

5

Vuexのstore(ストア)を使うと、各コンポーネント間で個別にデータのやり取りすることなく、データを一元的に管理できます。Vueでは欠かせない機能といえるでしょう。 ...

-Python, Tech
-, ,