数据科学 第 3 章 10 数据透视表

本节学习数据透视表

引用激励数据,连接数据库jili表,jili这几个太难打了,下文用df代表激励数据(代码省略)
之前在excel中用烂了的透视表,终于用python来实现了,其实主要是讲pivot_table里面的参数怎么使用,但书中讲的不是详细,还是要自己找一些文档或者视频辅助学习。

pivot_table 官方文档连接
像其他函数一样,官方文档中的参数有很多,具体如下:
df.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')

写在前面,如果要对透视表中的字段进行计数,有时候用count会报错,可以用len

实例运用:

1、简单版透视表

df.pivot_table(index='dep',aggfunc='sum')
#上面以部门为索引,下面有二级索引,部门、小组。  不知道是不是叫二级索引,暂且这么命名吧
df.pivot_table(index=['dep','group'],aggfunc='sum')

clipboard.png

2、升级版透视表:金额分组

对金额进行分组,然后再来透视表(看了就懂了):

#金额分组
amount = pd.cut(df['allbones'],[0,1000,5000,10000,20000,40000])
df.pivot_table(index=['dep',amount],values= 'allbones', aggfunc='count')

因为指定了值values = 'allbones',所以结果中只包含allbones的计算结果,如果不指定values,则会像上面一样计算满足条件的所有字段的count值。
clipboard.png

3、再升级版:多个计算方法

进行多个值的计算,并指定计算方法。 如果有需要,还可以增加计算值。
为了方便查看每个参数的内容,所以换行了。

df.pivot_table(index =[ 'dep',amount],
              values = ['allbones','oldrate'],
              aggfunc = {'allbones':[np.sum,len,np.mean],  #一个字段进行3中运算
                         'oldrate':np.sum})

clipboard.png

4、在透视表最后加一个汇总

df.pivot_table(index =[ 'dep',amount],
              values = ['allbones','oldrate'],
              aggfunc = [np.sum,np.mean,len],
              margins = True)    #margins默认为false,改成True后在表的最后显示汇总

5、大boss版,在每个部门下面进行分类汇总:不会

还没找到方法?,现在这些差不多够用了,就这样,煮饭去了,拜拜。

6、加蛋版:把透视表的索引列变为正常的列

(第3种方法更好用,第1 个没有成功,第2、3是OK的)
在创建透视表后,想用创建的透视表作为一个新的表,用新的表toushi做处理。
clipboard.png

为了实验,所有把toushi1 = toushi,在toushi1,尝试了几种方法:
1、把toushi1中的索引列复制为新的列,然后对新的列用str.split()进行拆分,是能拆分,但想取第1个值的话,返回的结果是NaN,因为它默认的值是NaN,username仍是index。故此方法失败。
clipboard.png
2、搜索到的另外一种方法,附上链接:链接

#把索引列变为正常的列
toushi3.reset_index(inplace = True)
toushi3

clipboard.png

3、这种方法也可把多索引列变为列:pandas官方文档

toushi2.reset_index(level=['username','name'])

clipboard.png

对第3条的补充:计算时间的最大最小值

可以用透视表实现最大值和最小值,在后期处理数据的时候可能会有用。(在秦路老师的RFM中,也用到了计算只交易一次客户的数量,用透视表也可以筛选。)

pd.pivot_table(data,index = 'username',
               values =['times','amount'],
               aggfunc={'times':[min,max],
                        'amount':[np.sum,len]})

clipboard.png

小感悟:

最后一个问题归根是索引的问题,在第3章的第6节,有讲到索引的具体方法,但没有记住,当时也没想到在透视表的时候可以用,

其实在搜索python函数处理数据时,函数在刚开始的时候就已经搜索到了,但不明白函数中参数的配置,所以忽略的快的方法,反而是花费了更多的时间去寻找代替的方法。下次搜索到之后先看文档!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值