Pandas pandas.melt() 函数

Minahil Noor 2023年1月30日
  1. pandas.melt() 语法
  2. 示例代码:pandas.melt()
  3. 示例代码:pandas.melt(),单列为 id_vars
  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 可选 它可以是一个元组、列表或一个 N 维的数组。它是用于标识符变量的列。你可以选择一个以上的标识符列
value_vars 可选 它可以是一个个元组、列表或一个 N 维的数组。。默认情况下,没有指定为标识符变量的列是值变量。
var_name 可选 它是一个标量类型的变量。它是标识符列的名称。默认情况下,它是 variable
value_name 可选 它是一个标量类型变量。它是非标识符列的名称。默认情况下,它是 value
col_level 可选 它是一个整数或字符串。在多索引列的情况下,我们可以使用这个参数来转换我们的 DataFrame

返回值

它返回一个转换后的 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%

在这里,你可以看到,在输出中没有标识符列。我们有两个非标识符列。原来的 DataFrame 的每一列现在都是输出 DataFrame 中的一行。

现在我们将传递可选的参数并检查结果。

示例代码:pandas.melt(),单列为 id_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"])

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,旁边的 variablevalues 列则是从原始 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() 与跳过列的例子

如果我们只想检查出勤率,我们需要指定 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%

IDName 列都被分配为标识符列。

相关文章 - Pandas Core