标签:pandas,pivot()方法
在《pandas基础:数据显示格式转换》中,我们使用melt()方法将数据框架从宽(wide)格式转换为长(long)格式。然而,如果要将数据框架从长格式转换为宽格式呢?如下图1所示。
图1
可以使用pandas的pivot()方法。下面通过一个简单的示例演示如何使用它。
对于经常使用Excel的用户来说,马上就知道可以通过使用透视表函数来实现这一点。基本上,将country列放在“行”中,将Month放在“列”中,然后将Sales作为“价值”放入表中。这里的好消息是,pandas中也有一个pivot函数。
下面的代码将创建一个“长”表单数据框架,看起来像上图1中左侧的表。
import pandas as pd
import numpy as np
np.random.seed(0)
months = (['Jan','Feb','Mar','Apr','May','Jun'] * 4)
months.sort()
long_df = pd.DataFrame({
'Country':['Canada','UK','USA','Australia'] * 6,
'Month':months,
'Sales':np.random.randint(1,1000,size=24)
})
结果如下图2所示。
图2
pandas的pivot方法的语法如下:
pandas.DataFrame.pivot(index=None, columns=None, values=None)
其中:
现在来实现数据格式的转换。注意,下面两行代码将返回相同的结果。然而,首选第二行代码,因为它更明确地说明了参数的用途。记住,“显性比隐性更好。”
long_df.pivot(index='Country',columns='Month')
long_df.pivot(index='Country',columns='Month',values='Sales')
图3
上面的结果有点不完美——列名是按字母顺序自动排序的,而不是按月份顺序。
有一个简单的修复方法,只需更改列顺序。实际上,可以将这个部分代码与pivot方法链接到一行代码中。
long_df.pivot(index='Country', columns='Month',values='Sales')[['Jan','Feb','Mar','Apr','May','Jun']]
图4
注:本文学习整理自pythoninoffice.com,供有兴趣的朋友参考。