PandasのDataFrameで特定の項目だけを縦横変換したい場合の説明です。※内容も変わる転置の説明ではありません。
意外と忘れやすい方法でもあるので、イメージが伝わりやすいように実際のデータを活用して変換例を解説いたします。
- 横データを縦に変換 → df.meltを使う
- 縦データを横に変換 → df.pivot_tableを使う
PandasのDataFrameを縦から横に変換(行から列) df.pivot_tableの例
ライブラリとサンプルデータの読み込み
pandasライブラリをインストールします。
import pandas as pd
サンプルデータを読み込み、DataFrame内容を表示します。
df1=pd.read_csv(r"C:\Users\abi00\OneDrive\デスクトップ\gazou\商品情報2000件.csv")
df1

df.pivot_tableを利用してインデックス(行)をカラム(列)に変換
特定項目名をKeyにその値を行から項目にpivot_tableを利用して変換します。あるKeyを利用して、データを縦から横に変換する利用例です。pivot_tableの詳しい利用方法はPandasのpivot_tableで複数項目を選択してaggfuncで集計でご紹介しています。
df1.pivot_table(index="カテゴリーID", columns="販売開始日", values="在庫金額", aggfunc = 'sum')

販売開始日の項目の値1/20と7/1の2つの全値が行から項目名に変換されました。
カラムに変換する値が多い場合、カラム名が横にずらずらっと並んでしまいます。そもそも実施したい内容であれば問題ありませんが、違うケースはないでしょうか?
データを縦(行)から横(列)に変換する場合、横に変換するべき項目を新規項目で起こしてpivotで横展開するケースがあります。例えば「新規・既存」という項目をcolumnsに設定して、横にしたいものをvaluesに入れるパターンです。
PandasのDataFrameを横から縦に変換(列から行) df.meltの例
サンプルデータの準備
前章で解説したdf1データを元に今度は元データに戻す操作を行います。df1格納データのマルチインデックスを解除し、扱いやすいかたちに変換します。
df2=df1.pivot_table(index="カテゴリーID", columns="販売開始日", values="在庫金額", aggfunc = 'sum')
df2=df2.reset_index()
df2
上記の結果が下記。カテゴリIDのインデックスが解除されています。

df.meltを利用してカラム(列)からインデックス(行)に変換
このデータを元に戻すには1/20,7/1を販売開始日の項目に入れて、在庫金額の項目を作る作業になります。df.meltを利用してデータを
df2.melt(id_vars="カテゴリーID",value_vars=["1/20","7/1"],var_name="販売開始日",value_name="在庫金額")
df2
販売開始日の値に項目名だった「1/20,7/1」が入りました。新たな項目名として「在庫金額」が作成され、紐づく値が入りました。
