1:构建数据
"""
pivot_table() 的特点就是默认显示指定索引列和所有数值列。
索引显示的是唯一值,所以会把对应的数值处理成均值。
其他str类型的列都会自动忽略。\n当然,使用pivot_table() 时,
可以通过添加参数进行计数或求和\n\n示例中账号是int类型,
如果是str类型,那么运行结果不会显示[‘账号’]这一列的内容。
"""
import numpy as np
import pandas as pd
df = pd.DataFrame({
'账号':[714466,714466,714466,737550,146832,218895,218895,412290,740150,141962,163416,239344,239344,307599,688981,729833,729833],
'客户名称':['华山派股份有限公司','华山派股份有限公司','华山派股份有限公司','丐帮(北京) 合伙人公司','恶人谷资产管理公司','桃花岛','桃花岛','有间客栈','逍遥子影业','白驼山(上海)影视艺术有限公司','聚贤庄','全真教药业','全真教药业','天地会快递','福寿堂','快手三教育培训有限公司','快手三教育培训有限公司'],
'销售':['令狐冲','令狐冲','令狐冲','令狐冲','江小鱼','江小鱼','江小鱼','段誉','段誉','欧阳克','欧阳克','欧阳克','欧阳克','韦小宝','韦小宝','韦小宝','韦小宝'],
'销售总监':['岳不群','岳不群','岳不群','岳不群','岳不群','岳不群','岳不群','岳不群','岳不群','完颜洪烈','完颜洪烈','完颜洪烈','完颜洪烈','完颜洪烈','完颜洪烈','完颜洪烈','完颜洪烈'],
'产品':['黑玉断续膏','葵花宝典','含笑半步癫','黑玉断续膏','黑玉断续膏','黑玉断续膏','葵花宝典','含笑半步癫','黑玉断续膏','黑玉断续膏','黑玉断续膏','含笑半步癫','葵花宝典','含笑半步癫','黑玉断续膏','黑玉断续膏','如意勾'],
'数量':[1,2,1,3,1,3,1,2,4,2,2,1,3,5,2,3,1],
'价格':[3000,2000,1000,3000,1000,3000,1000,2000,4000,2000,2000,1000,2000,3000,1000,4000,2000],
'状态':['流程中','流程中','待审批','驳回','已完成','流程中','流程中','待审批','驳回','已完成','流程中','待审批','待审批','已完成','已完成','驳回','流程中'],
})
数值类型的字段只有:账号,数量,价格。
2:index 指定单索引\n索引变成了[客户名称]这一列,values显示的只有数字,而且都处理成均值。
比如:华山三个,数量4/3,价格6000/3,账号就不用说了,三个都一样,均值自然就是其中一个;快手两个,数量4/2,价格6000/2
df1 = pd.pivot_table(df, index=['客户名称'])
3:指定多索引 索引顺序能决定不同的视觉体验,虽然结果是一致的。
df2 = pd.pivot_table(df, index=['销售总监', '销售', '客户名称'])
df3 = pd.pivot_table(df, index=[ '销售', '客户名称','销售总监'])
3:values
如果不需要显示全部的数值列,可以用Values参数指定
# 显然Values不能随便指定,pivot_table()只能显示数值列
print(pd.pivot_table(df, index=['客户名称'], values=['状态']))
4:aggfunc
当我们未设置aggfunc时,它默认aggfunc='mean’计算均值。其它如下
df4 = pd.pivot_table(df, index=['销售总监','销售','客户名称'],values=['数量','价格'],aggfunc=np.sum)
df5 = pd.pivot_table(df, index=['销售总监','销售','客户名称'],values=['数量','价格'],aggfunc=[np.mean,len,np.sum])
5:columns
fill_value
columns参数就是用来显示字符型数据的,和fill_value搭配使用
补充:当 values,aggfunc,columns 的取值只有一个时,有无中括号效果略有不同。
df6 = pd.pivot_table(df, index=['销售总监'], values=['价格'],aggfunc=[np.sum],columns=['产品'],fill_value=0)
6:更加复杂的有:
df7 = pd.pivot_table(df,index=['销售总监','状态'], values=['数量','价格'], columns=['产品'],aggfunc={'数量':len,'价格':np.sum},fill_value=0,margins=True)