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