用Pandas做透视表

Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。

数据透视表(Pivot Table)是一种交互式的表格,可以进行某些计算,如求和与计数等。

用于对明细数据表进行各种分类汇总。

假如我们有以下数据:

数据少,便于人脑计算理解。

分别是id(销售),date(日期),goods(商品),sales(销量)

问题:统计每个人每天销售商品 A 和 B 的销量之和。

便于对比说明,先在WPS表格中实现了简单的数据透视表。

在Pandas官方文档的说明中,方法和参数如下:

pandas.pivot_table(data, 
                   values=None, 
                   index=None, 
                   columns=None, 
                   aggfunc='mean', 
                   fill_value=None, 
                   margins=False, 
                   dropna=True, 
                   margins_name='All')

参数解释:(如解释有误,请指出,谢谢!)

data,即要进行透视表的数据,格式为DataFrame

values,用来汇总计算的列,如这里的销量

index,用来分类的列,如这里的人员和商品,在透视表中表现为行的标题

column,用来分类的列,如这里的日期,在透视表中表现为列的标题

aggfunc,用来汇总计算的方法,比如求和,则为aggfunc='sum',默认为求平均数mean

fill_value,用来填充计算结果中的空值,比如填充为0,则为:fill_value=0

margins,用来当所有的行或者列相加,得到总数;默认不汇总计算

dropna,用来去掉汇总结果全为空的列,默认不去掉

margins_name,当margins为Ture,即计算汇总时,对应行列的标题名称,默认为:All

最常用和重要的参数是:index、values、columns、aggfunc

那么用Pandas进行上面要求的透视表计算,代码如下:

获取数据:

import pandas as pd
import numpy as np
 '''
 省略了从excel中读取数据的步骤,直接在这里生成数据
 '''
 df = pd.DataFrame({
    'id': ['张三','张三','李四','王五','张三','李四','李四','王五','张三','李四','张三','李四'],
    'date': ['2019-01-01', '2019-01-01', '2019-01-01','2019-01-01', '2019-01-02','2019-01-02', '2019-01-02', '2019-01-02', '2019-01-03', '2019-01-03', '2019-01-04', '2019-01-04'],
    'goods':['A','B','A','B','A','A','B','A','A','B','A','A'],
    'sales': [3000, 2000, 3000, 2000, 3000, 3000, 2000,3000, 3000, 2000,3000, 3000]},
    columns = ['id','date','goods','sales'])
df

运行结果如下:

透视表操作代码:

df1=pd.pivot_table(df, 
               index=['id','goods'], 
               columns='date', 
               values='sales', 
               aggfunc=[np.sum], 
               fill_value=0, 
               margins=True,
               margins_name='总计')
df1

运行结果如下:

保存为Excel:

df1.to_excel('test_pivot.xls')

运行结果如下:

参考资料:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.pivot_table.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值