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列数据。 

posted @ 2021-04-17 18:15  正在学Python  阅读(547)  评论(0编辑  收藏  举报