今回はテーブル形式のデータをピボット(回転による変形)する方法について紹介しよう。
階層型インデックスを使い、二つのアクション(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