pandas.melt#

pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None, ignore_index=True)[源代码][源代码]#

将 DataFrame 从宽格式透视为长格式,可选择保留标识符集。

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

参数:
框架DataFrame

要解开的数据框。

id_vars标量, 元组, 列表, 或 ndarray, 可选

用作标识变量的列。

value_vars标量, 元组, 列表, 或 ndarray, 可选

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

var_name标量, 元组, 列表, 或 ndarray, 可选

用于 ‘variable’ 列的名称。如果为 None,则使用 frame.columns.name 或 ‘variable’。如果列是 MultiIndex,则必须是标量。

value_name标量,默认 ‘value’

用于’value’列的名称,不能是现有列的标签。

col_level标量,可选

如果列是 MultiIndex,则使用此级别进行熔化。

ignore_index布尔值, 默认为 True

如果为真,则忽略原始索引。如果为假,则保留原始索引。索引标签将根据需要重复。

返回:
DataFrame

未透视的 DataFrame。

参见

DataFrame.melt

相同的方法。

pivot_table

创建一个类似于电子表格的透视表作为 DataFrame。

DataFrame.pivot

返回按给定索引/列值组织的重塑DataFrame。

DataFrame.explode

将 DataFrame 从类似列表的列展开为长格式。

备注

更多示例请参考 用户指南

示例

>>> 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
>>> pd.melt(df, id_vars=["A"], value_vars=["B"])
A variable  value
0  a        B      1
1  b        B      3
2  c        B      5
>>> pd.melt(df, 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’ 列的名称:

>>> pd.melt(
...     df,
...     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

原始索引值可以保留:

>>> pd.melt(df, id_vars=["A"], value_vars=["B", "C"], ignore_index=False)
A variable  value
0  a        B      1
1  b        B      3
2  c        B      5
0  a        C      2
1  b        C      4
2  c        C      6

如果你有多级索引列:

>>> 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
>>> pd.melt(df, col_level=0, id_vars=["A"], value_vars=["B"])
A variable  value
0  a        B      1
1  b        B      3
2  c        B      5
>>> pd.melt(df, 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