Pandasのmelt
メソッドについて、基礎から応用までできるだけ詳しく解説します。
目次
melt
メソッドとは?
pandas.melt()
は、ワイド形式(wide format) のデータを ロング形式(long format) に変換するためのメソッドです。
例えば、ExcelやCSVなどでは「1列に1変数」ではなく「横に並んだ複数列が同じ変数を表す」形になっていることが多いですが、分析や可視化の前処理では「縦長の形式(tidy data)」に変換した方が扱いやすくなります。
イメージ
- ワイド形式(変換前)
ID | 2022 | 2023 | 2024 |
---|---|---|---|
A | 100 | 120 | 140 |
B | 90 | 110 | 150 |
- ロング形式(変換後)
ID | variable | value |
---|---|---|
A | 2022 | 100 |
B | 2022 | 90 |
A | 2023 | 120 |
B | 2023 | 110 |
A | 2024 | 140 |
B | 2024 | 150 |
基本的なコード
import pandas as pd
df = pd.DataFrame({
"ID": ["A", "B"],
"2022": [100, 90],
"2023": [120, 110],
})
melted = pd.melt(df, id_vars=["ID"])
print(melted)
# => columns: ["ID", "variable", "value"]
主要パラメータ
var_name
value_name
id_vars
- そのまま残したい列名 を指定します。
- 主キーやID列などは通常ここに入ります。
value_vars
- 縦に展開したい列 を指定します。
- 指定しない場合は、
id_vars
以外すべての列が対象になります。
import pandas as pd
df = pd.DataFrame({
"ID": ["A", "B"],
"2022": [100, 90],
"2023": [120, 110],
})
melted = pd.melt(
df,
id_vars=["ID"],
var_name="year",
value_name="sales"
)
print(melted)
value_vars
- 縦に展開したい列 を指定します。
- 指定しない場合は、
id_vars
以外すべての列が対象になります。
import pandas as pd
df = pd.DataFrame({
"ID": ["A", "B", "C"],
"2022": [100, 90, 130],
"2023": [120, 110, 150],
"2024": [140, 150, 170]
})
melted_partial = pd.melt(
df,
id_vars=["ID"],
value_vars=["2022", "2023"], # 2024はそのまま残す
var_name="year",
value_name="sales"
)
print(melted_partial)
ignore_index
- デフォルトは
True
で、インデックスはリセットされます。 False
にすると、元のインデックスを保持できます。
import pandas as pd
df = pd.DataFrame({
"ID": ["A", "B"],
"2022": [100, 90],
"2023": [120, 110],
}, index=[10, 20])
melted_keep_idx = pd.melt(
df,
id_vars=["ID"],
var_name="year",
value_name="sales",
ignore_index=False
)
print(melted_keep_idx)
応用的な使い方
複数のid_vars
df = pd.DataFrame({
"Name": ["Alice", "Bob"],
"Gender": ["F", "M"],
"Math": [85, 92],
"English": [78, 88]
})
pd.melt(df, id_vars=["Name", "Gender"], var_name="Subject", value_name="Score")
pivot
との関係
melt
は「ワイド → ロング」変換pivot
やpivot_table
は「ロング → ワイド」変換
両者を組み合わせることで、自由自在にデータの形を変換できます。
まとめ
melt
はデータをロング形式に整形する強力なツール。- 特に「可視化」や「tidy data」を意識した前処理で多用される。
id_vars
で残したい列を指定し、value_vars
で展開したい列を指定するのが基本。var_name
とvalue_name
を工夫することで読みやすいデータに変換できる。pivot
と組み合わせれば、データ整形が自由自在になる。
以上、PythonのPandasのmeltメソッドについてでした。
最後までお読みいただき、ありがとうございました。