今回はテーブル形式のデータをピボット(回転による変形)する方法について紹介しよう。

階層型インデックスを使い、二つのアクション(stackメソッド、unstackメソッド)でデータの形状を変更することができる。

ここからはいくつかの例を見ながら、ピボット操作について確認していく。

サンプルデータフレームの用意

import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(6).reshape((2, 3)),
                 index=pd.Index(['Tokyo', 'Osaka'], 'pref'),
                 columns=pd.Index(['one', 'two', 'three'], 'number'))
#        one  two  three
# Tokyo    0    1      2
# Osaka    3    4      5

stackメソッドで列を行にピボットする

用意したデータフレームに対してstackメソッドを実行すると、以下のようなシリーズが作成される。

result = df.stack()
# Tokyo  one      0
#        two      1
#        three    2
# Osaka  one      3
#        two      4
#        three    5
# dtype: int64

unstackメソッドで行を列にピボットする

stackメソッドでピボットしたデータフレームは、unstackメソッドを実行することで元の形へピボットすることができる。

result.unstack()
#        one  two  three
# Tokyo    0    1      2
# Osaka    3    4      5

unstackメソッドは、デフォルトだと最も内側の階層を対象にピボット操作が行われるが、インデックス番号で任意の階層を指定することもできる。

result.unstack(0)
#        Tokyo  Osaka
# one        0      3
# two        1      4
# three      2      5