Pandas pandas.melt()関数

Minahil Noor 2023年1月30日
  1. pandas.melt() の構文
  2. コード例:pandas.melt()
  3. コード例:単一列が id_vars である pandas.melt()
  4. コード例:列をスキップする pandas.melt()
  5. コード例:複数列の pandas.melt()
Pandas pandas.melt()関数

pandas.melt() 関数は、既存の DataFrame を再形成または変換します。DataFrame の方向をワイドフォーマットからロングフォーマットに変更します。

pandas.melt() の構文

pandas.melt(dataframe, id_vars, value_vars, var_name, value_name, col_level)

パラメーター

DataFrame 必須 ロングフォーマットに変更したいのは DataFrame です。
id_vars オプション tuplelist、または N 次元の array を指定できます。識別子変数に使用される列です。複数の識別子列を選択できます。
value_vars オプション tuplelist、または N 次元の array を指定できます。デフォルトでは、識別子変数として指定されていない列は値変数です。これらを選択することもできます。
var_name オプション スカラー型の変数です。識別子列の名前です。デフォルトでは、variable です。
value_name オプション スカラー型の変数です。非識別子列の名前です。デフォルトでは、value です。
col_level オプション 整数または文字列です。マルチインデックス列の場合、このパラメーターを使用して DataFrame を変換できます。

戻り値

1つ以上の識別子列と、変数と値という名前の 2つの非識別子列のみを含む、変換された DataFrame を返します。

コード例:pandas.melt()

最初に、必須パラメーター、つまり DataFrame のみを渡すことにより、この関数をチェックします。

import pandas as pd

dataframe=pd.DataFrame({'Attendance': {0: 60, 1: 100, 2: 80,3: 78,4: 95},
                    'Name': {0: 'Olivia', 1: 'John', 2: 'Laura',3: 'Ben',4: 'Kevin'},
                    'Obtained Marks': {0: '90%', 1: '75%', 2: '82%',3: '64%',4: '45%'}})
dataframe1 = pd.melt(dataframe)

print(dataframe1)

DataFrame は次のようになります

   Attendance    Name Obtained Marks
0          60  Olivia            90%
1         100    John            75%
2          80   Laura            82%
3          78     Ben            64%
4          95   Kevin            45%

出力:

          variable   value
0       Attendance      60
1       Attendance     100
2       Attendance      80
3       Attendance      78
4       Attendance      95
5             Name  Olivia
6             Name    John
7             Name   Laura
8             Name     Ben
9             Name   Kevin
10  Obtained Marks     90%
11  Obtained Marks     75%
12  Obtained Marks     82%
13  Obtained Marks     64%
14  Obtained Marks     45%

ここでは、出力に識別子列がないことがわかります。2つの非 ID 列があります。元の DataFrame の各列は、出力 DataFrame の行になります。

次に、オプションのパラメーターを渡し、結果を確認します。

コード例:単一列が id_vars である pandas.melt()

import pandas as pd

dataframe = pd.DataFrame(
    {
        "Attendance": {0: 60, 1: 100, 2: 80, 3: 78, 4: 95},
        "Name": {0: "Olivia", 1: "John", 2: "Laura", 3: "Ben", 4: "Kevin"},
        "Obtained Marks": {0: "90%", 1: "75%", 2: "82%", 3: "64%", 4: "45%"},
    }
)
dataframe1 = pd.melt(dataframe, id_vars=["Name"])

print(dataframe1)

出力:

     Name        variable value
0  Olivia      Attendance    60
1    John      Attendance   100
2   Laura      Attendance    80
3     Ben      Attendance    78
4   Kevin      Attendance    95
5  Olivia  Obtained Marks   90%
6    John  Obtained Marks   75%
7   Laura  Obtained Marks   82%
8     Ben  Obtained Marks   64%
9   Kevin  Obtained Marks   45%

識別子列は Name として指定され、variable 列と values 列がその隣にあり、元の DataFrame から抽出された値が含まれています。

var_namevalue_name の名前を割り当てて、デフォルトの variablevalues を置き換えることもできます。

import pandas as pd

dataframe = pd.DataFrame(
    {
        "Attendance": {0: 60, 1: 100, 2: 80, 3: 78, 4: 95},
        "Name": {0: "Olivia", 1: "John", 2: "Laura", 3: "Ben", 4: "Kevin"},
        "Obtained Marks": {0: "90%", 1: "75%", 2: "82%", 3: "64%", 4: "45%"},
    }
)
dataframe1 = pd.melt(
    dataframe, id_vars=["Name"], var_name="Performance", value_name="Success"
)

print(dataframe1)

出力:

     Name     Performance Success
0  Olivia      Attendance      60
1    John      Attendance     100
2   Laura      Attendance      80
3     Ben      Attendance      78
4   Kevin      Attendance      95
5  Olivia  Obtained Marks     90%
6    John  Obtained Marks     75%
7   Laura  Obtained Marks     82%
8     Ben  Obtained Marks     64%
9   Kevin  Obtained Marks     45%

コード例:列をスキップする pandas.melt()

Attendance のみを確認したい場合は、value_vars を指定する必要があります。

import pandas as pd

dataframe = pd.DataFrame(
    {
        "Attendance": {0: 60, 1: 100, 2: 80, 3: 78, 4: 95},
        "Name": {0: "Olivia", 1: "John", 2: "Laura", 3: "Ben", 4: "Kevin"},
        "Obtained Marks": {0: "90%", 1: "75%", 2: "82%", 3: "64%", 4: "45%"},
    }
)
dataframe1 = pd.melt(
    dataframe,
    id_vars=["Name"],
    value_vars="Attendance",
    var_name="Performance",
    value_name="Success",
)
print(dataframe1)

出力:

     Name Performance  Success
0  Olivia  Attendance       60
1    John  Attendance      100
2   Laura  Attendance       80
3     Ben  Attendance       78
4   Kevin  Attendance       95

元の DataFrameAttendance 列の情報のみが表示されます。

コード例:複数列の pandas.melt()

デモ DataFrame に追加の列 ID を追加します。

import pandas as pd

dataframe = pd.DataFrame(
    {
        "Attendance": {0: 60, 1: 100, 2: 80, 3: 78, 4: 95},
        "ID": {0: 1, 1: 2, 2: 3, 3: 4, 4: 5},
        "Name": {0: "Olivia", 1: "John", 2: "Laura", 3: "Ben", 4: "Kevin"},
        "Obtained Marks": {0: "90%", 1: "75%", 2: "82%", 3: "64%", 4: "45%"},
    }
)
dataframe1 = pd.melt(dataframe, id_vars=["ID", "Name"])

print(dataframe1)

出力:

   ID    Name        variable value
0   1  Olivia      Attendance    60
1   2    John      Attendance   100
2   3   Laura      Attendance    80
3   4     Ben      Attendance    78
4   5   Kevin      Attendance    95
5   1  Olivia  Obtained Marks   90%
6   2    John  Obtained Marks   75%
7   3   Laura  Obtained Marks   82%
8   4     Ben  Obtained Marks   64%
9   5   Kevin  Obtained Marks   45%

ID 列と Name 列の両方が識別子列として割り当てられます。

関連記事 - Pandas Core