#

DataFrame的melt方法讲长格式转换为宽格式,即所有列变为行,并在新列值中列出所有关联值。比如下面的DataFrame:

import pandas as pd
df = pd.DataFrame({'item':['apple','bannana','pear'],
                  'Jan':[100,200,300],
                  'Feb':[120,250,350],
                  'Mar':[90,180,400],
                  'Apr':[110,230,260],
                  'May':[130,240,160]})
  item Jan Feb Mar Apr May
0 apple 100 120 90 110 130
1 bannana 200 250 180 230 240
2 pear 300 350 400 260 160

melt之后为:

df_melt=df.melt(id_vars=['item',],var_name='Month',value_name='sales')
       item Month  sales
0     apple   Jan    100
1   bannana   Jan    200
2      pear   Jan    300
3     apple   Feb    120
4   bannana   Feb    250
5      pear   Feb    350
6     apple   Mar     90
7   bannana   Mar    180
8      pear   Mar    400
9     apple   Apr    110
10  bannana   Apr    230
11     pear   Apr    260
12    apple   May    130
13  bannana   May    240
14     pear   May    160

其中:

  • id_vars:需要保留的列,可以是一个列表,表示这些列不需要进行melt操作。
  • var_name:列的变量名,缺省为variable
  • value_name:列值,缺省为value

可以看出,melt实质是给出了我们关心的两个变量的所有可能情况(这里是Month, sales),以便于我们针对sales进一步的观察。比如使用小提琴图观察如下:

import seaborn as sns
sns.violinplot(x='Month',y='sales',data=df_melt)

img