2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

縦持ちデータ(ロング型)を横持ちデータ(ワイド型)に変換したい

Posted at

医療関連の企業に勤める友人から、大量のロング型データをワイド型データに変換したいって相談されました。
そちらの業界では、患者などのデータをワイド型で表すことが多いという。
そこで、変換ツールをpython作ったので記事にしました。


以下、変換イメージ

変換前

ID,data,item,
0,100,BPS,
0,200,LDL,
1,20,YBY,
2,XXX,YYY,
2,AAA,BBB,

変換後

ID   YBY  BBB  BPS     LDL  YYY                              
0     N/A  N/A  100    200  N/A
1      20  N/A  N/A     N/A  N/A
2     N/A  AAA  N/A     N/A  XXX

そこで、pandasを利用してツールを作成しました。
作成したツールは以下になります。

import pandas as pd
import csv

csv_file = open("sample.csv", "r",
                encoding="ms932", errors="", newline="")
f = csv.reader(csv_file, delimiter=",", doublequote=True,
               lineterminator="\r\n", quotechar='"', skipinitialspace=True)
columns = next(f)
data = []

for row in f:
    data.append(row)

df = pd.DataFrame(data, columns=columns)
df_t = df.pivot_table(values=[columns[1]], index=[columns[0]], columns=[
                      columns[2]], aggfunc='sum', fill_value='N/A')
df_t.to_excel('out.xlsx', index=True)

sample.csvを読み取って、ワイド型データに変換し、Excelに出力します。
前提として、csvの列は3つになっています。
IDごとに行を作成し、itemの項目が多いほど列が追加されます。そして、各値にdataが設定されます。もし、dataがなければN/Aが設定されます。

出力結果
スクリーンショット 2020-07-05 13.26.34.png

CSVをロング型からワイド型に変換するしたい方がいましたら、こちらの実装を参考にしてください。
以下のGithubにもソースは載せています。
https://github.com/kurihiro0119/transform_wide_long

2
1
2

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
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?