Pandas通过melt函数将宽格式数据转换成长格式

2023-02-24 00:00:00 函数 格式 转换

在 Pandas 中,melt() 函数用于将宽格式的数据转换为长格式。宽格式的数据通常是具有多个列作为变量的数据集,而长格式的数据则通常是将这些列中的值整合为一个单独的列,以及一个变量列和一个值列,用于描述观测值的属性和对应的值。

melt() 函数的基本语法如下:

pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

其中,参数的含义如下:

frame:要进行转换的数据集。
id_vars:需要保留的列名,用于唯一标识每个观测值。
value_vars:需要被转换为变量值的列名,如果不指定,则默认使用除 id_vars 外的所有列。
var_name:新变量列的列名,默认为 variable。
value_name:新值列的列名,默认为 value。
col_level:如果输入数据是多级列索引,则指定列级别来使用,否则忽略。
以下是一个简单的示例,演示如何使用 melt() 函数将宽格式的数据转换为长格式:

import pandas as pd

# 创建一个宽格式的数据集
df = pd.DataFrame({
    'id': [1, 2, 3],
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35],
    'income_2020': [50000, 60000, 70000],
    'income_2021': [55000, 65000, 75000]
})

# 使用 melt() 函数将数据转换为长格式
df = pd.melt(df, id_vars=['id', 'name', 'age'], value_vars=['income_2020', 'income_2021'], var_name='year', value_name='income')

# 打印转换后的数据集
print(df)

在上面的示例中,我们首先创建了一个宽格式的数据集,其中包含了每个人的 ID、姓名、年龄和 2020 年和 2021 年的收入。然后我们使用 melt() 函数将数据转换为长格式,指定了需要保留的 id、name 和 age 列作为唯一标识,需要转换为变量值的 income_2020 和 income_2021 列,以及新的变量列名 year 和新的值列名 income。最终输出的数据集如下:

   id     name  age         year  income
0   1    Alice   25  income_2020   50000
1   2      Bob   30  income_2020   60000
2   3  Charlie   35  income_2020   70000
3   1    Alice   25  income_2021   55000
4   2      Bob   30  income_202

相关文章