血液検査のデータをデータベースから取り出して,縦持ちデータを横持ちデータに変換しました.
日本語にすると一見難しそうですが,結論からいうとpandasのpivotを使うと1行で変換することができます.
縦持ちデータとは明確な定義は知りませんが,縦にダラダラと長く伸びるデータです.
実際に見ると分かりやすいので,縦持ちデータのサンプルを用意しました.
同じ検査日が1行となっておらず,検査の項目だけ行数が存在している状況で,視認性も悪く,データ分析する際に色々と面倒となりそうです.
あと,名前のみをインデックスとしてではなく,検査日と名前のマルチインデックスとした方が見やすそうです.
【完成図】
コード
pandasしか使いません.
#ライブラリインポート
import pandas as pd
#データの読み込み
df = pd.read_excel('パスを記入')
#データの確認
df.head()
##日付・名前をマルチインデックスとし,横持ちデータへ変換
df2 = df.pivot(index=['day','name'],columns='item',values='result')
#マルチインデックス解除(name列のみ)
df3 = df2.reset_index(level='name')
pivotの引数の説明すると,
index:実際指定したい行
columns:新列名にしたい旧列
values:新列にいれたい列を指定
横持ち変換するだけの場合は4行目実効するだけでいいんですが,整形したデータを更にExcelに書き出す場合は5行目でマルチインデックスを解除する必要がありました.
※csvで出力する場合は5行目不要でした.
日本語で説明するのが難しく,ググルのが大変でした.
誰かの役に立てれば幸いです.
参考)
1)https://note.nkmk.me/python-pandas-stack-unstack-pivot/
2)https://happy-analysis.com/python/python-topic-height-width.html