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