Pandasのmelt
関数は、データフレームを所謂「横持ち形式」から「縦持ち形式」に変換するのに非常に便利なツールです。
データを可視化する際や、統計分析の前処理として使用することが多いです。
melt
関数の基本的な使い方から、応用例までを詳しく紹介します。
melt関数の基本
基本的な使用法
melt
関数は、データフレームの特定の列を識別変数として保持し、「縦持ち形式」に変換します。
import pandas as pd
# サンプルデータフレーム
data = {
'ID': [1, 2, 3],
'Name': ['Alice', 'Bob', 'Charlie'],
'Math': [90, 80, 85],
'English': [85, 95, 90]
}
df = pd.DataFrame(data)
print("元のデータフレーム:\n", df)
# melt関数を使用
melted_df = df.melt(id_vars=['ID', 'Name'], var_name='Subject', value_name='Score')
print("\nmelt関数を使用した後のデータフレーム:\n", melted_df)
出力
元のデータフレーム:
ID Name Math English
0 1 Alice 90 85
1 2 Bob 80 95
2 3 Charlie 85 90
melt関数を使用した後のデータフレーム:
ID Name Subject Score
0 1 Alice Math 90
1 2 Bob Math 80
2 3 Charlie Math 85
3 1 Alice English 85
4 2 Bob English 95
5 3 Charlie English 90
この例では、ID
とName
列を識別変数として保持し、Math
とEnglish
列を変数名(Subject
)とその値(Score
)に変換しています。
引数の説明
id_vars
変換後も保持する列を指定します。これは識別変数(ID)やキーとなる情報です。value_vars
変換対象となる列を指定します。省略すると、id_vars
以外の全ての列が対象となります。var_name
新しい「変数名」列の名前を指定します。省略するとデフォルトでvariable
となります。value_name
新しい「値」列の名前を指定します。省略するとデフォルトでvalue
となります。
応用例
特定の列のみを変換
特定の列のみを変換する場合、value_vars
を使用します。
# 特定の列のみを変換
melted_df = df.melt(id_vars=['ID', 'Name'], value_vars=['Math'], var_name='Subject', value_name='Score')
print("\n特定の列のみを変換したデータフレーム:\n", melted_df)
出力
特定の列のみを変換したデータフレーム:
ID Name Subject Score
0 1 Alice Math 90
1 2 Bob Math 80
2 3 Charlie Math 85
元のデータフレームに変換後のデータを追加
元のデータフレームに変換後のデータを追加する場合、merge
関数を使用します。
# melt関数を使用
melted_df = df.melt(id_vars=['ID', 'Name'], var_name='Subject', value_name='Score')
# 元のデータフレームに変換後のデータを追加
merged_df = pd.merge(df, melted_df, on=['ID', 'Name'], how='left')
print("\n元のデータフレームに変換後のデータを追加:\n", merged_df)
出力
元のデータフレームに変換後のデータを追加:
ID Name Math English Subject Score
0 1 Alice 90 85 Math 90
1 1 Alice 90 85 English 85
2 2 Bob 80 95 Math 80
3 2 Bob 80 95 English 95
4 3 Charlie 85 90 Math 85
5 3 Charlie 85 90 English 90
複数の識別変数
複数の識別変数がある場合も同様にid_vars
で指定します。
# サンプルデータフレーム
data = {
'ID': [1, 2, 3],
'Name': ['Alice', 'Bob', 'Charlie'],
'Semester': ['Spring', 'Fall', 'Spring'],
'Math': [90, 80, 85],
'English': [85, 95, 90]
}
df = pd.DataFrame(data)
print("元のデータフレーム:\n", df)
# melt関数を使用
melted_df = df.melt(id_vars=['ID', 'Name', 'Semester'], var_name='Subject', value_name='Score')
print("\nmelt関数を使用した後のデータフレーム:\n", melted_df)
出力
元のデータフレーム:
ID Name Semester Math English
0 1 Alice Spring 90 85
1 2 Bob Fall 80 95
2 3 Charlie Spring 85 90
melt関数を使用した後のデータフレーム:
ID Name Semester Subject Score
0 1 Alice Spring Math 90
1 2 Bob Fall Math 80
2 3 Charlie Spring Math 85
3 1 Alice Spring English 85
4 2 Bob Fall English 95
5 3 Charlie Spring English 90
まとめ
Pandasのmelt
関数は、データを「縦持ち形式」に変換するのに便利です。データの可視化や分析において役立ちます。