mars.dataframe.DataFrame.melt#

DataFrame.melt(id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)#

将一个数据框从宽格式转换为长格式,选项是保留标识符集。

这个函数对于将一个数据框转换为一种格式非常有用,其中一个或多个列是标识符变量 (id_vars),而所有其他列,被视为测量变量 (value_vars), 都被“反透视”到行轴上,只留下两个非标识符列,‘variable’ 和 ‘value’。

.. versionadded:: 0.20.0
Parameters
  • id_vars (tuple, list, 或 ndarray, 可选) – 用作标识符变量的列。

  • value_vars (元组, 列表, 或 ndarray, 可选) – 要进行反透视的列。如果未指定,将使用所有未设为 id_vars 的列。

  • var_name (标量) – 用于‘变量’列的名称。如果为None,它使用 frame.columns.name或‘变量’。

  • value_name (标量, 默认 'value') – 用于‘value’列的名称。

  • col_level (intstr, 可选) – 如果列是 MultiIndex,那么使用这个级别进行 melt。

Returns

未透视的数据框。

Return type

数据框

另请参阅

melt, pivot_table, DataFrame.pivot, Series.explode

示例

>>> import mars.dataframe as md
>>> df = md.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
...                    'B': {0: 1, 1: 3, 2: 5},
...                    'C': {0: 2, 1: 4, 2: 6}})
>>> df.execute()
   A  B  C
0  a  1  2
1  b  3  4
2  c  5  6
>>> df.melt(id_vars=['A'], value_vars=['B']).execute()
   A variable  value
0  a        B      1
1  b        B      3
2  c        B      5
>>> df.melt(id_vars=['A'], value_vars=['B', 'C']).execute()
   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

‘变量’和‘值’列的名称可以自定义:

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

如果您有多索引列:

>>> df = md.DataFrame({('A', 'D'): {0: 'a', 1: 'b', 2: 'c'},
...                    ('B', 'E'): {0: 1, 1: 3, 2: 5},
...                    ('C', 'F'): {0: 2, 1: 4, 2: 6}})
>>> df.execute()
   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']).execute()
   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')]).execute()
  (A, D) variable_0 variable_1  value
0      a          B          E      1
1      b          B          E      3
2      c          B          E      5