maxframe.dataframe.DataFrame.melt#

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

将 DataFrame 从宽格式转换为长格式,可选择保留标识符。

此函数用于将 DataFrame 调整为一种格式,其中一列或多列为标识变量(id_vars),而所有其他列(视为测量变量 value_vars)则被“展开”到行轴上,最终仅保留两个非标识列:'variable' 和 'value'。

参数:
  • id_vars (tuple, list, or ndarray, optional) -- 用作标识变量的列。

  • value_vars (tuple, list, or ndarray, optional) -- 要展开的列。如果未指定,则使用所有未设置为 id_vars 的列。

  • var_name (scalar) -- 用于 'variable' 列的名称。如果为 None,则使用 frame.columns.name 或 'variable'。

  • value_name (scalar, default 'value') -- 用于 'value' 列的名称。

  • col_level (int or str, optional) -- 如果列是 MultiIndex,则使用此层级进行展开。

  • ignore_index (bool, default True) -- 如果为 True,则忽略原始索引;如果为 False,则保留原始索引。索引标签将根据需要重复。

返回:

展开后的 DataFrame。

返回类型:

DataFrame

示例

>>> import maxframe.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

'variable' 和 'value' 列的名称可以自定义:

>>> 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