Python Tech

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

2021年8月27日

結論

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

 

階層的なインデックスが生成されました。

 

今回参考にした資料

pandas.MultiIndex.from_tuples — pandas 1.3.2 documentation

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

  • この記事を書いた人

次世代ペンギン

長いのでペンギンとお呼びください。システム開発・プログラミングのお仕事をしています。甘味とコーヒーは生命線。日常での学びを記事にしています。

人気の記事

1

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

2

先日の記事では、初心者からフリーランスプログラマーになる難しさと、それでもなんとか稼げるようになるにはどうしたらいいか解説しました。 今回の記事では、稼げるフリーランサーになるために必要な要素を、もう ...

3

気休めだけの甘い言葉は書きません。 最近は多くの企業やサイトで、使い捨てられるプログラマーが欲しいがために、甘い言葉で初心者プログラマを誘い出しています。 この記事では、まずは「現実」をちゃんと理解し ...

4

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

5

※画像はずとまよの新曲とは一切関係ありません   ずっと真夜中でいいのに。(以下、ずとまよ)の新曲『勘ぐれい』のMVが12月1日に公開されましたね。 MV前に公開されていた原曲を聴き、神曲な ...

6

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

-Python, Tech
-, ,

© 2021 ペンギンのーと