大家经常把melt函数和透视表pivot_table函数放在一起对比。
同时,这里有一篇不错的对比的文章。Pandas melt和pivot_table比excel透视表好用多了
以及pandas行转列,列转行操作
pandas.melt函数是为了将数据转换为对计算机友好的函数,当然,也是为了更加便于计算。
它主要是可以将在宽度上的表现形式转换为在长度上的表现形式。(Pandas.melt() unpivots a DataFrame from wide format to long format.)
melt()函数可用于将DataFrame转换成一种格式,在这种格式中,其中一列或多列是标识符变量,而所有其他列(被视为测量变量)都不会旋转到行轴,仅留下两个非标识符列,变量和值。
pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)
参数 | 含义 |
frame: | 要处理的数据集,格式需要为DataFrame |
id_vars [元组,列表或ndarray,可选]: | 用作标识符变量的列。 |
value_vars [元组,列表或ndarray,可选]: | 要取消透视的列。如果未指定,则使用未设置为id_vars的所有列。 |
var_name [scalar]: | 用于“变量”列的名称。如果为None,则使用frame.columns.name或'variable'。 |
value_name [标量,默认为'value']: | 用于“ value”列的名称。 |
col_level [int或string,可选]: | 如果列是MultiIndex,则使用此级别进行融合。 |
# Create a simple dataframe
# importing pandas as pd
import pandas as pd
# creating a dataframe
df = pd.DataFrame({'Name': {0: 'John', 1: 'Bob', 2: 'Shiela'},
'Course': {0: 'Masters', 1: 'Graduate', 2: 'Graduate'},
'Age': {0: 27, 1: 23, 2: 21}})
Name | Course | Age | |
---|---|---|---|
0 | John | Masters | 27 |
1 | Bob | Graduate | 23 |
2 | Shiela | Graduate | 21 |
# Name is id_vars and Course is value_vars
pd.melt(df, id_vars =['Name'], value_vars =['Course'])
Name | variable | value | |
---|---|---|---|
0 | John | Course | Masters |
1 | Bob | Course | Graduate |
2 | Shiela | Course | Graduate |
# multiple unpivot columns
pd.melt(df, id_vars =['Name'], value_vars =['Course', 'Age'])
Name | variable | value | |
---|---|---|---|
0 | John | Course | Masters |
1 | Bob | Course | Graduate |
2 | Shiela | Course | Graduate |
3 | John | Age | 27 |
4 | Bob | Age | 23 |
5 | Shiela | Age | 21 |
# Names of ‘variable’ and ‘value’ columns can be customized
pd.melt(df, id_vars =['Name'], value_vars =['Course'],
var_name ='ChangedVarname', value_name ='ChangedValname')
Name | ChangedVarname | ChangedValname | |
---|---|---|---|
0 | John | Course | Masters |
1 | Bob | Course | Graduate |
2 | Shiela | Course | Graduate |
【参考文献】
1.Python | Pandas.melt()