データアナリストのメモ帳

データアナリストのメモ帳

IT企業で働くデータアナリストのブログ

【Python】pandas.meltで横持ちのデータを縦持ちにする

pandas.meltで横持ちのDataFrameを縦に変換する方法です。 DataFrameの列に日付が並んでいる(左から右へday1, day2, ...となる)場合などに有効です。

例えば、次の画像のようなデータを、 pandas.meltの使い方

このように列として持っていた日付を縦に並べます。 pandas.meltの使い方

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