Pandas.melt函数解析
pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)
frame: 要处理的数据集。
id_vars: 可选项,不需要被转换的列名。
value_vars: 可选项,需要转换的列,如果剩下的列全部都要转换,就不用写了。
var_name和value_name: 自定义设置对应的列名。
col_level :如果列是MultiIndex,则使用此级别。
function:Unpivot a DataFrame from wide to long format, optionally leaving identifiers set.
功能:将数据从从宽数据转换为长数据,有选择的保留标识列。
df.pivot() 将长数据集转换成宽数据集,df.melt() 则是将宽数据集变成长数据集
宽数据如下:
9/30/2018 6/30/2018 3/31/2018
项目
Total 1,078,836 1,026,542 868,008
Cost 884,207 775,858 654,927
Profit 194,629 250,684 213,081
长数据如下:
项目 数额 时间
Total 1,078,836 9/30/2018
Cost 884,207 9/30/2018
Profit 194,629 9/30/2018
Total 1,026,542 6/30/2018
Cost 775,858 6/30/2018
Profit 250,684 6/30/2018
Total 868,008 3/31/2018
Cost 654,927 3/31/2018
Profit 213,081 3/31/2018
举例说明:
import pandas as pd
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
转换1:保留A列,对C列进行转换: 即将原C列的数据保留,原C列字段名作为新的数据列variable的数值。
df=pd.melt(df,id_vars='A',value_vars='C')
df
明白了吗?其实可以这样理解:就是A列列名、内容保持不变,B列的列名、内容被丢掉,C列列名被重塑为variable列数据、内容被重塑为value列数据。
转换2:保留A列,剩下的列全部转换。
df=pd.melt(df,id_vars='A')
df
即: A列列名、内容保持不变,B、C列列名被重塑为variable列数据、内容被重塑为value列数据。
转换3:保留A列,剩下的列全部转换,给设置的列定义列名
df=pd.melt(df,id_vars='A',var_name='Cat',value_name='Dog')
df
即: A列列名、内容保持不变,B、C列列名被重塑为Cat列数据、内容被重塑为Dog列数据。