- API reference
- DataFrame
- pandas.DataF...
pandas.DataFrame.melt#
- DataFrame.melt(id_vars=None,value_vars=None,var_name=None,value_name='value',col_level=None,ignore_index=True)[source]#
Unpivot a DataFrame from wide to long format, optionally leaving identifiers set.
This function is useful to massage a DataFrame into a format where oneor more columns are identifier variables (id_vars), while all othercolumns, considered measured variables (value_vars), are “unpivoted” tothe row axis, leaving just two non-identifier columns, ‘variable’ and‘value’.
- Parameters:
- id_varsscalar, tuple, list, or ndarray, optional
Column(s) to use as identifier variables.
- value_varsscalar, tuple, list, or ndarray, optional
Column(s) to unpivot. If not specified, uses all columns thatare not set asid_vars.
- var_namescalar, default None
Name to use for the ‘variable’ column. If None it uses
frame.columns.name
or ‘variable’.- value_namescalar, default ‘value’
Name to use for the ‘value’ column, can’t be an existing column label.
- col_levelscalar, optional
If columns are a MultiIndex then use this level to melt.
- ignore_indexbool, default True
If True, original index is ignored. If False, the original index is retained.Index labels will be repeated as necessary.
- Returns:
- DataFrame
Unpivoted DataFrame.
See also
melt
Identical method.
pivot_table
Create a spreadsheet-style pivot table as a DataFrame.
DataFrame.pivot
Return reshaped DataFrame organized by given index / column values.
DataFrame.explode
Explode a DataFrame from list-like columns to long format.
Notes
Referencethe user guide for more examples.
Examples
>>>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 C0 a 1 21 b 3 42 c 5 6
>>>df.melt(id_vars=['A'],value_vars=['B']) A variable value0 a B 11 b B 32 c B 5
>>>df.melt(id_vars=['A'],value_vars=['B','C']) A variable value0 a B 11 b B 32 c B 53 a C 24 b C 45 c C 6
The names of ‘variable’ and ‘value’ columns can be customized:
>>>df.melt(id_vars=['A'],value_vars=['B'],...var_name='myVarname',value_name='myValname') A myVarname myValname0 a B 11 b B 32 c B 5
Original index values can be kept around:
>>>df.melt(id_vars=['A'],value_vars=['B','C'],ignore_index=False) A variable value0 a B 11 b B 32 c B 50 a C 21 b C 42 c C 6
If you have multi-index columns:
>>>df.columns=[list('ABC'),list('DEF')]>>>df A B C D E F0 a 1 21 b 3 42 c 5 6
>>>df.melt(col_level=0,id_vars=['A'],value_vars=['B']) A variable value0 a B 11 b B 32 c B 5
>>>df.melt(id_vars=[('A','D')],value_vars=[('B','E')]) (A, D) variable_0 variable_1 value0 a B E 11 b B E 32 c B E 5