【毎日Python】Pythonでデータフレームを縦持ちデータから横持ちに整形する方法|pandas.pivot

pandas.pivot
こつこつPython
import pandas as pd

Pythonで、縦持ちのデータを横持ちデータに整形する方法です。
使用するのは、Pythonのpandasライブラリのpivotメソッドです。
今回は、このようなデータフレームを用意します。
縦持ちとは、項目が増えたときに縦に増えるデータ構造のことを指し、横に増えるデータ構造を横持ちと言います。

df = pd.read_csv('./sample_data/data_melt.csv')
df
df.pivot(index='都道府県名', columns='和暦(年)', values='人口(男)')

まず、都道府県を軸に、西暦ごとの人口総数を表示してみましょう。
pivotの引数に、整形したいデータフレーム、インデックス、カラム、要素に指定したいカラムを指定します。
実行します。
指定した条件で表示することができました。

df.pivot(index='西暦(年)', columns='都道府県名', values=['人口(男)', '人口(女)'])

次に、要素の値を複数指定してみましょう。
値を複数指定する場合は、リストで指定します。
西暦年を軸に、都道府県ごとの男女の人口を表示できました。
インデックスに複数指定した場合は、マルチインデックス として表示されます。
都道府県コードと都道府県をインデックスに指定してみましょう。
マルチインデックス で表示できました。

df.pivot(index=['都道府県コード','都道府県名'], columns='西暦(年)', values='人口(総数)')

要素は省略することもできます。
省略した場合には、インデックスカラムで指定されなかったカラムが、全て要素の値になります。
実行します。
都道府県名と西暦年以外を要素として表示されました。

df.pivot(index='都道府県名', columns='西暦(年)')
df.pivot(index='都道府県名', columns='都道府県コード', values='人口(女)')

なお、インデックスとカラムの値が重複している場合にはエラーが返されます。
実行します。
都道府県名と都道府県コードの値が重複している為、エラーが返されました。

なお、似たメソッドでpivot_tableメソッドがあります。
pivot_tableメソッドは、クロス集計ができますが、pivotメソッドはデータの整形のみを行う点が異なります。

df.pivot_table(index='都道府県コード', columns='都道府県名', values='人口(総数)')

関連メソッド

【毎日Python】Pythonで横持ちのデータを縦持ちに整形する方法|pandas.melt

【毎日Python】Pythonでデータフレームからピボットテーブルを作成する方法|DataFrame.pivot_table

【毎日Python】Pythonで横持ちデータと縦持ちデータの整形|DataFrame.stack/unstack

未経験からはじめるPython学習「キノクエスト」 キノクエスト
  • スキルアップしたいけど何からはじめればよいかわからない…
  • プログラミングスクールに入りたいけど料金が高い…
  • プログラミングを学んでも業務やキャリアに活かせるか不安…

キノクエストは、このような悩みを持つ方にぴったりのプログラミング学習サービスです。
国内最大級のプログラミング学習系YouTubeチャンネル「キノコード」が提供しているから、未経験者にもわかりやすく質の高い学習体験を実感していただけます。

キノクエスト