当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Pandas DataFrame melt方法用法及代码示例


Pandas DataFrame.melt(~)方法将源 DataFrame 的格式从"wide""long".

让我们看一个简单的例子。考虑以下 DataFrame :

名字

年龄

高度

alex

40

150

bob

50

160

这被认为是一个"wide"DataFrame 因为每一行都捕获有关该人的所有相关数据。现在,将其转换为"long" DataFrame :

名字

变量

alex

age

30

alex

height

150

bob

age

50

bob

height

160

现在,每一行捕获有关该人的单个变量,这不可避免地会导致垂直"long" DataFrame 。

Pandas 使用这个术语"unpivot"表示基于变量延长 DataFrame 的操作。在这个例子中,我们是不旋转变量ageheight.

参数

1.id_vars | tuplelistNumpy array | optional

用作标识符的列的标签。

2. value_vars | tuplelistNumpy array | optional

要取消透视的列的标签。默认情况下,所有列都将取消透视。

3. var_name | scalar | optional

变量列的标签。默认情况下,var_name="variable"

4. value_name | scalar | optional

值列的标签。默认情况下,value_name="value"

5. col_level | intstring | optional

执行该方法的级别。这仅与多索引列相关。

返回值

已取消透视的DataFrame。

例子

考虑以下 DataFrame :

df = pd.DataFrame({"name":["alex","bob","cathy"], "age":[40,50,60], "height":[150,160,170]})
df



   name   age  height
0  alex   40   150
1  bob    50   160
2  cathy  60   170

基本用法

这里,标识符列是 name ,要取消透视的列是 ageheight

df.melt(id_vars="name", value_vars=["age","height"])



   name   variable  value
0  alex   age       40
1  bob    age       50
2  cathy  age       60
3  alex   height    150
4  bob    height    160
5  cathy  height    170

在这里,我们实际上可以省略 value_vars 参数,因为默认情况下,除了标识符列 ( name ) 之外的所有列都将被取消透视。

指定value_vars

假设我们只想取消透视一列而不是两列。我们可以使用 value_vars 参数简单地指定要取消透视的列:

df.melt(id_vars="name", value_vars="age")



   name   variable  value
0  alex   age       40
1  bob    age       50
2  cathy  age       60

请注意 height 列是如何被剥离的。如果我们想保留高度列,我们必须将其包含在 id_vars 参数中,如下所示:

df.melt(id_vars=["name","height"], value_vars="age")



   name   height  variable  value
0  alex   150     age       40
1  bob    160     age       50
2  cathy  170     age       60

指定var_name和value_name

在这里,我们再次展示df供您参考:

df



   name   age  height
0  alex   40   150
1  bob    50   160
2  cathy  60   170

正如我们在上面的示例中看到的,新的列标签默认为 "variable""value" ,我们可以通过指定 var_namevalue_name 来更改它,如下所示:

df.melt(id_vars="name", var_name="attribute", value_name="number")



   name   attribute  number
0  alex   age        40
1  bob    age        50
2  cathy  age        60
3  alex   height     150
4  bob    height     160
5  cathy  height     170

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas DataFrame | melt method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。