📅  最后修改于: 2023-12-03 14:49:44.481000             🧑  作者: Mango
在数据分析中,我们通常需要将数据转换为整洁(tidy)的形式,使得数据更容易被理解和分析。Pandas 中的 melt()
函数可以将宽数据帧(wide data frame)转换为长数据帧(long data frame),也就是将多列变量转换为一列变量,同时保留其它列的信息作为标识符(id variables)。
宽数据帧和长数据帧的区别可以用下图表示:
可以看到,宽数据帧将多个变量放在一列,每个变量作为一列,并且包含多个观测值。长数据帧将一个变量拆分为多个列,每个变量只包含一个观测值。
假设我们有一个宽数据帧:
id var1 var2 var3
0 1 2 3 4
1 2 6 7 8
2 3 10 11 12
我们想将 var1
、var2
、var3
这三列变量转换为一列变量 variable
,同时将它们的值转换为 value
,并且保留 id
变量作为标识符:
import pandas as pd
data = {'id': [1, 2, 3], 'var1': [2, 6, 10], 'var2': [3, 7, 11], 'var3': [4, 8, 12]}
df = pd.DataFrame(data)
我们可以使用 melt()
函数来实现:
df_melted = pd.melt(df, id_vars=['id'], var_name='variable', value_name='value')
这里 id_vars
参数表明要保留的标识符变量,var_name
参数是转换后新生成的列名,value_name
参数是存放原变量的值的列名。
转换后的长数据帧如下:
id variable value
0 1 var1 2
1 2 var1 6
2 3 var1 10
3 1 var2 3
4 2 var2 7
5 3 var2 11
6 1 var3 4
7 2 var3 8
8 3 var3 12
可以看到,variable
列中存放着原来的变量名,value
列中存放着原变量的值。
Pandas 的 melt()
函数可以将宽数据帧转换为长数据帧,这在数据分析中很常见。我们可以指定要保留的标识符变量,以及新生成的列名和列值列名。