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関数は、データを「縦持ち形式」に変換するのに便利です。データの可視化や分析において役立ちます。
 
       
       
       
  
  
  
  