数据挖掘技术-使用povit_table函数创建透视表

使用povit_table函数创建透视表

  1. 准备数据

准备数据meal_order_info.csv,并将meal_order_info.csv数据放到Linux本地/course/DataAnalyze/data目录。

  1. 使用povit_table函数创建透视表
  1. 使用订单详情表制作简单透视表,通过设定index参数示例,如代码 41所示。

代码 41 使用订单号作为透视表索引

In[1]:

import pandas as pd

import numpy as np

import os

os.chdir(‘/course/DataAnalyze/data’)

detail= pd.read_csv ('meal_order_detail1.csv')

detailPivot = pd.pivot_table(detail[['order_id','counts','amounts']],index = 'order_id')

print('以order_id作为分组键创建的订单透视表为:\n',detailPivot.head())

Out[1]:

以 order_id 作为分组键创建的订单透视表为:

             amounts    counts

order_id                     

137       32.333333  1.500000

165       52.944444  1.166667

166       48.200000  1.400000

171       36.285714  1.428571

177       34.250000  1.000000

  1. 由结果可以看出在不特殊指定聚合函数aggfunc时,会默认使用numpy.mean进行聚合运算,numpy.mean会自动过滤掉非数值类型数据。可以通过指定aggfunc参数修改聚合函数,示例如代码 42所示。

代码 42 修改透视表的聚合函数

In[2]:

detailPivot1 = pd.pivot_table(detail[['order_id','counts','amounts']],

                             index = 'order_id',aggfunc = np.sum)

print('以order_id作为分组键创建的订单销量与售价总和透视表为:\n',detailPivot1.head())

Out[2]:

以 order_id 作为分组键创建的订单销量与售价总和透视表为:

           amounts  counts

order_id                 

137           194       9

165           953      21

166           241       7

171           254      10

177           137       4

  1. 和groupby方法分组的时候相同,pivot_table函数在创建透视表的时候分组键index可以有多个,示例如代码 43所示。

代码 43 使用订单号和菜品名称作为透视表索引

In[3]:

detailPivot2 = pd.pivot_table(detail[['order_id','dishes_name','counts','amounts']],

                        index = ['order_id','dishes_name'],aggfunc = np.sum)

print('以order_id和dishes_name作为分组键创建的订单销量与售价总和透视表为:\n',

     detailPivot2.head())

Out[3]:

以 order_id 和 dishes_name 作为分组键创建的订单销量与售价总和透视表为:

                           amounts  counts

order_id dishes_name                     

137      农夫山泉NFC果汁100%橙汁        6       1

         凉拌菠菜                  27       1

         番茄炖牛腩                 35       1

         白饭/小碗                  1       4

         西瓜胡萝卜沙拉               26       1

  1. 通过设置columns参数,指定列分组,示例如代码 44所示。

代码 44 指定菜品名称为列分组键

In[3]:

detailPivot2 = pd.pivot_table(detail[['order_id','dishes_name','counts','amounts']],

                        index = 'order_id',columns = 'dishes_name',aggfunc = np.sum)

print('以order_id和dishes_name作为行列分组键创建的透视表前5行4列为:\n',

     detailPivot2.iloc[:5,:4])

Out[3]:

以 order_id 和 dishes_name 作为行列分组键创建的透视表前 5 行 4 列为:

             amounts                        

dishes_name  42度海之蓝  北冰洋汽水  38度剑南春  50度古井贡酒

order_id                                   

137             NaN     NaN     NaN     NaN

165             NaN     NaN    80.0     NaN

166             NaN     NaN     NaN     NaN

171             NaN     NaN     NaN     NaN

177             NaN     NaN     NaN     NaN

  1. 当全部数据列数很多时,只想要显示自己关心的列,可以通过指定values参数来实现,如代码 45所示。

代码 45 指定某些列制作透视表

In[4]:

detailPivot4 = pd.pivot_table(detail[['order_id','dishes_name','counts','amounts']],

                             index = 'order_id', values = 'counts', aggfunc = np.sum)

print('以order_id作为行分组键counts作为值创建的透视表前5行为:\n',

      detailPivot4.head())

Out[4]:

order_id作为行分组键counts作为值创建的透视表前5行为:

           counts

order_id

1002         7.0

1003        10.0

1004        17.0

1008         5.0

1011        10.0

  1. 通过代码 45可以看出,当某些数据不存在时,会自动填充NaN,因此可以指定fill_value参数,表示当存在缺失值时,以指定数值进行填充,如代码 46所示。

代码 46 对透视表中的缺失值进行填充

In[5]:

detailPivot5 = pd.pivot_table(detail[['order_id','dishes_name','counts','amounts']],

                        index = 'order_id',columns = 'dishes_name',

aggfunc = np.sum,fill_value = 0)

print('空值填0后以order_id和dishes_name为行列分组键创建透视表前5行4列为:\n',

     detailPivot5.iloc[:5,:4])

Out[5]:

空值填0后以order_id和dishes_name为行列分组键创建透视表前5行4列为:

             amounts                        

dishes_name  42度海之蓝北冰洋汽水  38度剑南春  50度古井贡酒

order_id

1002              0       0       0       0

1003              0       0       0       0

1004              0       0       0       0

1008              0       0       0       0

1011             99       0       0       0

  1. 此外,还可以可以更改margins参数,查看汇总数据,如代码 47所示。

代码 47 透视表上添加汇总数据

In[6]:

detailPivot6 = pd.pivot_table(detail[['order_id','dishes_name','counts','amounts']],

                             index = 'order_id',columns = 'dishes_name',

aggfunc = np.sum,fill_value = 0,margins = True)

print('添加margins后以order_id和dishes_name为分组键的透视表前5行后4列为:\n',

     detailPivot6.iloc[:5,-4:])

Out[6]:

添加margins后以order_id和dishes_name为分组键的透视表前5行后4列为:

             counts                    

dishes_name黄油曲奇饼干黄花菜炒木耳黑米恋上葡萄   All

order_id

1002           0.0    0.0    0.0   7.0

1003           0.0    0.0    0.0  10.0

1004           0.0    1.0    0.0  17.0

1008           0.0    0.0    0.0   5.0

1011           0.0    0.0    0.0  10.0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值