Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。本文主要介绍一下Pandas中pandas.DataFrame.melt方法的使用。

DataFrame.melt(id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None) [source]

"Unpivots" DataFrame从宽格式转换为长格式,可选保留设置的标识符变量。

这个函数对于将DataFrame转换成这样一种格式非常有用,其中一个或多个列是标识符变量(id_vars),而所有其他列(被认为是测量变量(value_vars))都"unpivoted"到行轴,只留下两个非标识符列"variable"和"value"。

参数

rame : DataFrame

id_vars:tuple, list,或ndarray,可选

用作标识符变量的列。

value_varstuple, list, 或 ndarray,可选

要unpivot的列。如果未指定,则使用未设置为id_vars的所有列。

var_name:标量

用于‘variable’列的名称。如果为None,则使用 frame.columns.name‘variable’

value_name:标量,默认为'value'

用于‘value’列的名称。

col_levelintstring,可选

如果列是MultiIndex,则使用此级别进行融合。

例子

>>> import pandas as pd
>>> df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
... 'B': {0: 1, 1: 3, 2: 5},
... 'C': {0: 2, 1: 4, 2: 6}})
>>> df
A B C
0 a 1 2
1 b 3 4
2 c 5 6
>>> df.melt(id_vars=['A'], value_vars=['B'])
A variable value
0 a B 1
1 b B 3
2 c B 5
>>> df.melt(id_vars=['A'], value_vars=['B', 'C'])
A variable value
0 a B 1
1 b B 3
2 c B 5
3 a C 2
4 b C 4
5 c C 6

可以自定义‘variable’ 和 ‘value’ 列的名称

>>> df.melt(id_vars=['A'], value_vars=['B'],
... var_name='myVarname', value_name='myValname')
A myVarname myValname
0 a B 1
1 b B 3
2 c B 5

如果您有多索引列:

>>> df.columns = [list('ABC'), list('DEF')]
>>> df
A B C
D E F
0 a 1 2
1 b 3 4
2 c 5 6

>>> df.melt(col_level=0, id_vars=['A'], value_vars=['B'])
A variable value
0 a B 1
1 b B 3
2 c B 5
>>> df.melt(id_vars=[('A', 'D')], value_vars=[('B', 'E')])
(A, D) variable_0 variable_1 value
0 a B E 1
1 b B E 3
2 c B E 5