スポンサーリンク

【Python】Pandasのmelt関数の使い方 縦持ちに変換

記事内に広告が含まれています。

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

この例では、IDName列を識別変数として保持し、MathEnglish列を変数名(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関数は、データを「縦持ち形式」に変換するのに便利です。データの可視化や分析において役立ちます。

スポンサーリンク
Python
著者SNS
タイトルとURLをコピーしました