▶ 対数変換して相関をみたり可視化する方法は以下をご覧ください。
はじめに
今回はpandasのstack()/unstack()メソッドを扱うことにします。stackは「積む」という意味ですね。stack()/unstack()は、積んだり崩したりするメソッドです。stackは列から行へのピボットと説明されることが多いですが、「行方向に積む」ということなんでしょうね。逆に、unstackは「行方向に崩す」ということですね。
データを集計していて行と列を入れ替えたいときがありますよね。今回は、そんなときに使うstack/unstackを整理しましょう。
pandasにはSeriesとDataFrameというデータ構造があります。
Series はリストのように順序を持った一次元のデータ列と、そのデータが何かを示す見出しを格納するオブジェクトです。pandas でよく使われるデータ構造として1次元の Series(シリーズ)、2次元の DataFrame(データフレーム)があります。
https://docs.pyq.jp/python/pydata/pandas/series.html?highlight=dataframe
まずはSerisからみていきましょう。
unstack()
Seriesは1次元のデータ構造なので「行方向に積む」メソッドであるstack()メソッドはありません。unstack()がどういう操作なのか、さっそく試してみましょう。
# ライブラリのインポート
import pandas as pd
# サンプルデータの作成
animals = pd.Series([1,2,3,4,5],
index=[['ズーラシア','ズーラシア','ズーラシア','旭山動物園','旭山動物園'],
['らくだ','らいおん','ぺんぎん','らくだ','ぺんぎん']])
animals.unstack()
このように階層型インデックスのSeriesのインデックスが列に移動して表形式になります。defaultでは内側のインデックスが列に移動しますが、これを指定することもできます。
animals.unstack(level=0)
stack()
次にstack()メソッドです。こちらはDataFrameにのみ適用できます。こちらもさっそく試してみましょう。
df_animals=animals.unstack()
df_animals
df_animals.stack()
列にあったどうぶつたちの名前が行方向に移動して、階層型インデックスのシリーズになります。
stack()とunstack()を組み合わせると、好きなように変形させることができます。たとえば、df_animalsの行と列を入れ替えたければ、次のようにします。
df_animals.stack().unstack(0)
これは、まずstack()で動物たちの名前が行に移動して階層型インデックスになります。このときlevel=0が動物園名、level=1が動物たちの名前となっています。この階層型インデックスをもつシリーズで、level=0のインデックスを列に移動させるためにunstack(0)としています。引数名levelは省略することができます。
まとめ
いかがでしょうか?データフレームの行と列を入れかえたいときってありますよね。stack/unstackで自由自在に入れ替えることができるようになりました。
▶ データフレームから自由にデータの抽出をしましょう。条件に合ったデータを抽出する方法は以下の記事を参考にしてください。
▶ 不均衡データを扱う場合は、サンプリングでデータの均衡化をはかります。以下の記事をどうぞ。
コメント