📜  使用 Pandas Melt 将宽数据帧重塑为带有标识符的整洁(1)

📅  最后修改于: 2023-12-03 14:49:44.481000             🧑  作者: Mango

使用 Pandas Melt 将宽数据帧重塑为带有标识符的整洁

在数据分析中,我们通常需要将数据转换为整洁(tidy)的形式,使得数据更容易被理解和分析。Pandas 中的 melt() 函数可以将宽数据帧(wide data frame)转换为长数据帧(long data frame),也就是将多列变量转换为一列变量,同时保留其它列的信息作为标识符(id variables)。

什么是宽数据帧和长数据帧

宽数据帧和长数据帧的区别可以用下图表示:

wide-vs-long-data

可以看到,宽数据帧将多个变量放在一列,每个变量作为一列,并且包含多个观测值。长数据帧将一个变量拆分为多个列,每个变量只包含一个观测值。

使用示例

假设我们有一个宽数据帧:

   id  var1  var2  var3
0   1     2     3     4
1   2     6     7     8
2   3    10    11    12

我们想将 var1var2var3 这三列变量转换为一列变量 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() 函数可以将宽数据帧转换为长数据帧,这在数据分析中很常见。我们可以指定要保留的标识符变量,以及新生成的列名和列值列名。