【Python】pandas.meltで横持ちのデータを縦持ちにする
pandas.meltで横持ちのDataFrameを縦に変換する方法です。 DataFrameの列に日付が並んでいる(左から右へday1, day2, ...となる)場合などに有効です。
例えば、次の画像のようなデータを、
このように列として持っていた日付を縦に並べます。
id_varsで、ID等として使う列を指定します。(この列は元々縦持ちであると想定) var_nameは縦持ちにした変数の列名を、value_nameは縦持ちにした値の列名を指定します。
※id_varsで指定しなかった列はすべて縦持ちに変換されます。
# import modules import pandas as pd import numpy as np # DataFrameの定義 df = pd.DataFrame() df['id'] = ['id_' + str(i) for i in range(0, 10)] * 100 cols = ['day' + str(i) for i in range(1, 8)] for col in cols: df[col] = np.random.rand(1000) # pd.melt で 元の DataFrameを変換 pd.melt(df, id_vars = ['id'], var_name = 'day', value_name = 'value')
pandas.melt reference https://pandas.pydata.org/docs/reference/api/pandas.melt.html