有时,我们可能需要将pandas数据框架从宽(wide)格式转换为长(long)格式,这可以通过使用melt方法轻松完成。本文通过一个简单的示例演示如何使用melt方法。考虑以下示例数据集:一个表,其中包含4个国家前6个月的销售数据。然后,我们的目标是将“宽”格式转换为“长”格式,如上图1所示。'country':['Canada','UK','USA','Australia'],'Jan':np.random.randint(1,100,size=(4)),'Feb':np.random.randint(1,1000,size=(4)),'Mar':np.random.randint(1,1000,size=(4)),'Apr':np.random.randint(1,1000,size=(4)),'May':np.random.randint(1,1000,size=(4)),'Jun':np.random.randint(1,1000,size=(4)),pd.melt(dataframe,
id_vars=None, value_vars=None, var_name=None, value_name=’value’,
col_level=None, ignore_index=True)- id_vars:列名的列表/元组。这是为了指定要用作标识符变量的列。
- value_vars:列名的列表/元组。要取消填充的列,留空意味着使用除id_vars之外的所有列。
- var_name:字符串。“variable”列的列名。
- value_name:字符串。”value”列的列名。
使用“country”列作为标识符变量id_vars。在第一行代码中,将value_vars留空,实际上是在说:使用除“country”之外的所有列。因此,它相当于下面的第二行代码。pd.melt(sales,
id_vars = 'country')pd.melt(sales,
id_vars = 'country', value_vars = ['Jan','Feb','Mar','Apr','May','Jun'])结果看起来不错。但是,注意到列标题中的一个小问题——“variable”和“value”列的描述性不强。我们想把它们分别改为“Month”和“Sales”。可以使用df.rename()方法来实现。然而,通过利用melt()方法里的var_name和value_name参数更容易。pd.melt(sales,
id_vars = 'country',var_name='Month',value_name='Sales')注:本文学习整理自pythoninoffice.com,供有兴趣的朋友学习参考。
|