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 的操作。在这个例子中,我们是不旋转变量age
和height
.
参数
1.id_vars
| tuple
或 list
或 Numpy array
| optional
用作标识符的列的标签。
2. value_vars
| tuple
或 list
或 Numpy array
| optional
要取消透视的列的标签。默认情况下,所有列都将取消透视。
3. var_name
| scalar
| optional
变量列的标签。默认情况下,var_name="variable"
。
4. value_name
| scalar
| optional
值列的标签。默认情况下,value_name="value"
。
5. col_level
| int
或 string
| 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
,要取消透视的列是 age
和 height
:
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_name
和 value_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
相关用法
- Python Pandas DataFrame mean方法用法及代码示例
- Python Pandas DataFrame memory_usage方法用法及代码示例
- Python Pandas DataFrame merge方法用法及代码示例
- Python Pandas DataFrame median方法用法及代码示例
- Python Pandas DataFrame max方法用法及代码示例
- Python Pandas DataFrame mod方法用法及代码示例
- Python Pandas DataFrame mode方法用法及代码示例
- Python Pandas DataFrame mask方法用法及代码示例
- Python Pandas DataFrame min方法用法及代码示例
- Python Pandas DataFrame mad方法用法及代码示例
- Python Pandas DataFrame mul方法用法及代码示例
- Python Pandas DataFrame empty属性用法及代码示例
- Python Pandas DataFrame pop方法用法及代码示例
- Python Pandas DataFrame nsmallest方法用法及代码示例
- Python Pandas DataFrame sample方法用法及代码示例
- Python Pandas DataFrame items方法用法及代码示例
- Python Pandas DataFrame swaplevel方法用法及代码示例
- Python Pandas DataFrame agg方法用法及代码示例
- Python Pandas DataFrame copy方法用法及代码示例
- Python Pandas DataFrame pow方法用法及代码示例
- Python Pandas DataFrame insert方法用法及代码示例
- Python Pandas DataFrame lt方法用法及代码示例
- Python Pandas DataFrame all方法用法及代码示例
- Python Pandas DataFrame unstack方法用法及代码示例
- Python PySpark DataFrame filter方法用法及代码示例
注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas DataFrame | melt method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。