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メソッドについてでした。
最後までお読みいただき、ありがとうございました。
