Pythonのpandasでデータを加工する際に欠かせないピボット処理について、stack, unstack, pivotの使い方を解説します。
Pythonのpandasでデータを扱っているんだけど、ピボットテーブルってどうやって作るんだろう?
tack, unstack, pivotといった関数を使ったピボット処理を使えば簡単に作れますよ!
ピボット処理とは
ピボット処理とは、表形式のデータを横持ちから縦持ち(あるいはその逆)に変換する処理のことです。
ピボット処理を用いることで、データの集計や可視化に適した形式にデータを変換することができます。例えば、顧客名、商品名、販売数量といったデータが複数の行に分散している場合、ピボット処理を用いて顧客名を行方向、商品名を列方向に整理することで、より見やすく、分析しやすい形式に変換することができます。
pandasには、ピボット処理を実行するための関数が複数用意されており、stack, unstack, pivotなどがよく使われます。
stack関数によるピボット処理
stack関数は、列方向の階層化されたMultiIndexを行方向に変換することで、ピボットテーブルを作成します。MultiIndexとは、複数のインデックスを持つ階層化された行列のことです。具体的には、DataFrameの列のインデックスを行に移動することができます。
以下に、サンプルデータを用いてstack関数の使い方を解説します。
import pandas as pd
df = pd.DataFrame({
'A': ['foo', 'bar', 'baz'],
'B': [1, 2, 3],
'C': [4, 5, 6]
})
df = df.set_index(['A', 'B'])
stacked_df = df.stack()
print(stacked_df)
このコードでは、まず、DataFrameの’A’と’B’の列をMultiIndexとして設定しています。次に、stack関数を用いて、列方向のMultiIndexを行方向に変換し、ピボットテーブルを作成しています。出力結果は以下のようになります。
A B
foo 1 C 4
B 1
2 C 5
B 2
baz 3 C 6
B 3
dtype: int64
このように、stack関数によって、列方向に存在したMultiIndexが行方向に移動され、新たな階層化されたMultiIndexが作成されました。これにより、列方向に複数存在していたデータを、行方向に整理することができました。
unstack関数によるピボット処理
unstack関数は、行方向の階層化されたMultiIndexを列方向に変換することで、ピボットテーブルを作成します。具体的には、DataFrameの行のインデックスを列に移動することができます。
以下に、サンプルデータを用いてunstack関数の使い方を解説します。
import pandas as pd
df = pd.DataFrame({
'A': ['foo', 'bar', 'baz'],
'B': [1, 2, 3],
'C': [4, 5, 6]
})
df = df.set_index(['A', 'B'])
stacked_df = df.stack()
unstacked_df = stacked_df.unstack()
print(unstacked_df)
このコードでは、まず、DataFrameの’A’と’B’の列をMultiIndexとして設定しています。次に、stack関数を用いて、列方向のMultiIndexを行方向に変換した後、unstack関数を用いて、行方向のMultiIndexを列方向に変換し、ピボットテーブルを作成しています。出力結果は以下のようになります。
C
B 1 2 3
A
bar 5 NaN NaN
baz NaN NaN 6
foo 4 5 NaN
このように、unstack関数によって、行方向に存在していたMultiIndexが列方向に移動され、新たな階層化されたMultiIndexが作成されました。これにより、行方向に複数存在していたデータを、列方向に整理することができました。
pivot関数によるピボット処理
pivot関数は、行と列のインデックスを指定してピボットテーブルを作成します。具体的には、DataFrameの任意の列を値として、行と列のインデックスを指定することで、ピボットテーブルを作成することができます。
以下に、サンプルデータを用いてpivot関数の使い方を解説します。
import pandas as pd
df = pd.DataFrame({
'A': ['foo', 'bar', 'baz', 'foo', 'bar', 'baz'],
'B': ['one', 'one', 'one', 'two', 'two', 'two'],
'C': [1, 2, 3, 4, 5, 6],
'D': [7, 8, 9, 10, 11, 12]
})
pivot_df = df.pivot(index='A', columns='B', values='C')
print(pivot_df)
このコードでは、まず、サンプルデータとして’A’、’B’、’C’、’D’の4つの列を持つDataFrameを作成しています。次に、pivot関数を用いて、’A’列を行インデックス、’B’列を列インデックス、’C’列を値とするピボットテーブルを作成しています。
出力結果は以下のようになります。
B one two
A
bar 2 5
baz 3 6
foo 1 4
このように、pivot関数によって、行と列のインデックスを指定して、ピボットテーブルを作成することができました。pivot関数は、stack関数やunstack関数とは異なり、任意の列を値として指定できるため、柔軟性が高いです。
リスキリングでキャリアアップしてみませんか?
リスキリング(学び直し)は、経済産業省が推奨しており、
今だけ、最大70%のキャッシュバックを受けることができます。
最大70%の給付金が出るおすすめのプログラミングスクール!
国策で予算が決められているため申し込みが多い場合は早期に終了する可能性があります!
興味のある方はすぐに確認しましょう。
まとめ
Pythonのpandasでデータを加工する際に欠かせないピボット処理について、stack, unstack, pivotの使い方を解説しました。
- ピボット処理とは、表形式のデータを横持ちから縦持ち(あるいはその逆)に変換する処理のことである。
- pandasには、ピボット処理を実行するための関数が複数用意されており、stack, unstack, pivotなどがよく使われる。
- stack関数は、列方向の階層化されたMultiIndexを行方向に変換することで、ピボットテーブルを作成する。
- unstack関数は、行方向の階層化されたMultiIndexを列方向に変換することで、ピボットテーブルを作成する。
- pivot関数は、行と列のインデックスを指定してピボットテーブルを作成する。
ピボット処理ってデータ加工の基本的な方法で、これらの関数を使いこなせるようになると、データ分析の幅が広がりそうですね。今後、実際に業務で使ってみたいと思います。
ピボットテーブルは、データ分析において非常に重要な機能の一つであり、多様なデータ加工に活用できます。データ分析においては、ピボット処理を使ってデータを整理し、見やすく分析しやすい形式に変換することが非常に重要です。
コメント