search
LoginSignup
1

posted at

updated at

【Python】日付ありデータの縦持ち→横持ち変換

血液検査のデータをデータベースから取り出して,縦持ちデータを横持ちデータに変換しました.

日本語にすると一見難しそうですが,結論からいうとpandasのpivotを使うと1行で変換することができます.

縦持ちデータとは明確な定義は知りませんが,縦にダラダラと長く伸びるデータです.

実際に見ると分かりやすいので,縦持ちデータのサンプルを用意しました.

【縦持ちデータサンプル】
tatemoti_kensa.png

同じ検査日が1行となっておらず,検査の項目だけ行数が存在している状況で,視認性も悪く,データ分析する際に色々と面倒となりそうです.

あと,名前のみをインデックスとしてではなく,検査日と名前のマルチインデックスとした方が見やすそうです.

【完成図】

yokomoti_kennsa1.png

コード

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1