Pandasの記事をシリーズで書いています。
今回の記事は第24回目になります。
今回の記事では、『Multiindex』(マルチインデックス)という概念を扱っていこうと思います。
Multiindex とは文字通り、複数のインデックスという意味です。
この記事を読めば
- MultiIndexとは?
- コラムからインデックスに変更するには
- MultiIndexを扱う時のレベルとは?
が分かります。
また、Multiindexの概要が十分に理解できたら、次回以降の記事で『pivot』や『pivot_table』についても触れていきます。
今回の記事は、そのウォーミングアップのような位置づけになります。
ではさっそく始めていきますね。
今回使うデータ
今回は、data.worldさんのサイトからウェラブル端末に関するデータを使っていきます。
read_csv()で読み込むと下記のような感じになります。
Body.Location(体のどの部位につけるか)というコラムと、Company...Country(会社がある国)というコラムがあるので、これら2つをインデックスにしていきます。
set_index()
コラムをインデックスにするメソッドは、.set_index()があります。
引用元:Pandasドキュメント
keys には、インデックスにしたいコラム名を引数として渡します。
今回は2つのコラムをインデックスにしたいので、コラム名をリストに入れて、引数として渡します。
df.set_index(keys=[ "コラムA", "コラムB" ])
そしてこの実行結果をオリジナルのDataFrame に上書きしたいので、パラメーターinplace = True とします。
また、新たに作ったインデックスをアルファベット順に並べたいので、
.sort_index()
でインデックスをアルファベット順(インデックスが数字の場合は小さい順)に並べます
実行結果は下記のようになりました。
リスト型にして引数として渡したコラム名は一番最初に書かれたものから順番に一番外側のインデックスから配置されます。
言葉での説明はややこしいので下のイラストをご覧くださいませ。<(_ _)>
リストの最初のアイテムから順番に、外側からインデックスを埋めていきます。
新たにインデックスにしたインデックスのデータ型は?
上のスクショから分かるように、新たなインデックスのデータ型はタプルです。
また、インデックスの名前は、2つのコラム名が一緒になったリスト型になっています
インデックスのラベルを変更したい時(レベルとは何か?)
インデックスのラベル名を変更したい時に使うのが.set_names()になります。
引用元:Pandasドキュメント
ただ、Multiindex になっている時には、注意が必要です。
どちらのインデックス名を変更するのか指定しないといけないからです。
ドキュメントに引数としてレベルを渡すと書いていますが、この『レベル』というものが、Multiindex の、どのインデックスを指定するかに使われるものです。
では、2つのインデックスのうち、『Company...Country』を日本語の『国名』に変えてみます。
df.index.set_names( names="変更後のラベル", level=multiindexのレベル, inplace=上書きするか?)
実行結果は下記のようになります。
この『レベル』の定義は、後々、Pandasのドキュメントを読む時にも必要になるので、是非覚えておいてくださいね
まとめ
今回の記事では、実際にデータを集計する前に必要となる作業について書かせていただきました。
データを集計する前のデータの処理が終われば、実際にデータを集計する事ができます。(エクセルのピボットテーブルを使った事がある方なら、Pandasでも同じことができるメソッドがあります)
少し退屈な記事が続くと思いますが、どうぞよろしくお願いします!