pandas.DataFrame.melt#
- DataFrame.melt(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’。
- 参数
- id_vars元组、列表或ndarray,可选
用作标识符变量的列。
- value_vars元组、列表或ndarray,可选
要取消透视的列。如果未指定,则使用未设置为的所有列 id_vars 。
- var_name标量
用于‘Variable’列的名称。如果没有,则使用
frame.columns.name
或“可变的”。- value_name标量,默认‘值’
用于‘Value’列的名称。
- col_levelint或str,可选
如果列是多重索引,则使用此级别来融化。
- ignore_index布尔值,默认为True
如果为True,则忽略原始索引。如果为False,则保留原始索引。索引标签将在必要时重复。
1.1.0 新版功能.
- 退货
- DataFrame
未透视的DataFrame。
参见
melt
相同的方法。
pivot_table
将电子表格样式的数据透视表创建为DataFrame。
DataFrame.pivot
返回按给定索引/列值组织的整形DataFrame。
DataFrame.explode
将DataFrame从类似列表的列分解为长格式。
注意事项
参考文献 the user guide 查看更多示例。
示例
>>> 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.melt(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
>>> 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