第一时间获取价值内容 数据透视表是数据分析工作中经常会用到的一种工具。Excel本身具有强大的透视表功能,Python中pandas也有透视表的实现。本文使用两个工具对同一数据源进行相同的处理,旨在通过对比的方式,帮助读者加深对数据透视表的理解。 数据源简介:本文数据源来自网络,很多介绍pandas的文章都使用了该数据。这是一份销售数据,数据样例如下: 在分析之前,需要确保你安装了pandas(最好使用jupyter)和Excel(2016版)。接下来每一个环节,我们都将使用二者实现同样的效果。Python代码的部分,我都做了详细的注释,Excel操作流程我也做了比较详细的说明。后台回复“透视表”可以获得数据和代码。 处理过程目标1:读取数据,查看数据样例1.pandas实现 #导入必要的包 运行效果如下: 2.excel实现 直接打开文件即可查看数据。 目标2:使用行索引,查看每一个Name的Quality,price汇总数据1.pandas实现
运行结果: 当我们只指定index时,就是指定了行标签,pivot_table函数会默认按照平均值,汇总所有的数值字段。由于Account字段被pandas“理解”成了数值类型的(可以通过df.dtypes查看),所以结果中出现了Account列。上面的结果表示每个Name的Account,Price,Quantity的平均值。 2.Excel实现 选中数据区域,插入,数据透视表,将Name字段拉倒“行”区域,Account,Price,Quantity拉入“值”区域,并将三者的字段汇总方式设置为平均值。整个步骤的流程及运行结果如下图所示:
目标3:使用多个行索引,查看每个Manager的每个Rep对应的Account,Price,Quantity汇总值1.pandas实现 pd.pivot_table(df, index=['Manager', 'Rep'], margins=True) 运行效果如下: 2.Excel实现 在前面基础上,将Manager,Rep拉到“行”的位置即可。效果如下图,可以看到,在关键的数值上,两个结果是一致的,只是在形式上有所不同。 为了在形式上更接近pandas的结果,可以设置透视表的布局。选择“设计”选项卡,报表布局,选择“大纲形式显示”即可,效果如上图所示。 仔细观察,发现excel里对每一个Manager都做了汇总。这个可以通过“设计”选项卡,“分类汇总”,“不显示分类汇总”去掉。pandas如何实现分类汇总,这个暂时还没有找到相关资料。 目标4:设置我们关心的汇总字段,此处设置price,去掉Account和Quantity1.pandas实现
结果如下图左侧所示: 2.Excel实现 Excel中只需要在上面的基础上,在“值”的地方删掉Account,Quality即可。效果如上图右侧图所示。 目标5:实现对Price的求和1.Pandas实现 pd.pivot_table(df, index=['Manager', 'Rep'], values=['Price'], aggfunc=np.sum, margins=True) 效果如下图左图所示: ![]() 2.Excel实现 需要在上一步的基础上,将Price的值字段设置改成求和即可,如上图右图中图所示。结果如上图中间所示。 注:Pandas可以同时对一个字段进行多种汇总操作,(Excel貌似不行)
![]() 目标6: 使用列索引,查看不同产品的数据情况1、pandas实现 pd.pivot_table(df, index=['Manager', 'Rep'], columns=['Product'], values=['Price'], aggfunc=np.sum, margins=True) 结果如下图所示: ![]() 2.Excel实现 在上面的基础上,将Product拉到“列”的位置即可。 ![]() 可以看到,有些位置没有对应的值,Pandas默认用NaN填充,Excel则采用置空处理。Pandas可以增加fill_value参数设置为0。(Excel貌似不可以设置)
![]() 目标7:使用行索引和列索引,同时查看多个字段(Price,Quality)的汇总值1.Pandas实现 pd.pivot_table(df, index=['Manager', 'Rep'], columns=['Product'], values=['Price', 'Quantity'], aggfunc=np.sum, margins=True, fill_value=0) ![]() 2.Excel实现 在上面的基础上,只需在“值”的位置加入Quantity,并将值字段设置为“求和”即可。值得一提的是,可以通过“列”的位置,“数值”和“Product”的上下关系,控制显示的格式,下面显示的结果和pandas的结果一致,读者可以调整下看看效果。 ![]() 目标8:行列索引的转换,把Product由列索引改为行索引1.pandas实现
![]() 2.Excel实现 在上一步的基础上,将Product从“列”位置拖到“行”位置即可。 ![]() 目标9:对Price和Quantity使用不同的汇总方式1.pandas实现 通过字典的方式,为不同的字段传入不同的聚合函数。 pd.pivot_table(df, index=['Manager', 'Rep'], columns=['Product'], values=['Price', 'Quantity'], aggfunc={'Price': np.sum, 'Quantity': np.size}, margins=True, fill_value=0) ![]() 2.Excel 实现 只需在目标7的基础上,将Price和Quantity的值字段设置成相应的聚合方式即可。如下图所示。 ![]() 注:同一个字段可以用列表方式传多个函数。
![]() 目标10:实现透视表筛选功能,只查看Debra Henley的数据1.pandas实现 table = pd.pivot_table(df, index=['Manager', 'Rep'], columns=['Product'], values=['Price', 'Quantity'], aggfunc={'Price': np.sum, 'Quantity': np.size}, margins=True, fill_value=0) 使用query传入筛选的参数即可,列表里可以传入多个参数,如 2.excel实现 做好的数据透视表,具有行和列的筛选功能。我们在9的基础上,对manager进行筛选,保留Debra Henley即可。效果如下所示: ![]() ![]() 也可以将manager字段拉到“筛选器”的位置来实现,再选择Manager的值为Debra Henley即可。 ![]() 小结与备忘:index-对应透视表的“行”,columns对应透视表的列,values对应透视表的‘值’,aggfunc对应值的汇总方式。用图形表示如下: ![]() |
|
来自: 西北望msm66g9f > 《培训》