• pandas_使用透视表与交叉表查看业绩汇总数据


    # 使用透视表与交叉表查看业绩汇总数据
    import pandas as pd
    import numpy as np
    import copy
    
    # 设置列对齐
    pd.set_option("display.unicode.ambiguous_as_wide",True)
    pd.set_option("display.unicode.east_asian_width",True)
    
    dataframe = pd.read_excel(r'C:UserslenovoDesktop总结Python超市营业额.xlsx')
    
    # 对姓名和日期进行分组,并进行求和
    dff = dataframe.groupby(by = ['姓名','日期'],as_index = False).sum()
    '''
        姓名      日期  工号  交易额
    0   周七  20190301  1005     600
    1   周七  20190302  1005     580
    2   张三  20190301  1001    2000
    3   张三  20190302  2002    1900
    4   张三  20190303  1001    1300
    5   李四  20190301  1002    1800
    6   李四  20190302  2004    2180
    7   王五  20190301  1003     800
    8   王五  20190302  2006    1830
    9   赵六  20190301  1004    1100
    10  赵六  20190302  1004    1050
    11  钱八  20190301  2012    1550
    12  钱八  20190302  1006     720
    '''
    # 将 dff 的索引,列 设置成透视表形式
    dff = dff.pivot(index = '姓名',columns = '日期',values = '交易额')
    '''
    日期  20190301  20190302  20190303
    姓名                              
    周七     600.0     580.0       NaN
    张三    2000.0    1900.0    1300.0
    李四    1800.0    2180.0       NaN
    王五     800.0    1830.0       NaN
    赵六    1100.0    1050.0       NaN
    钱八    1550.0     720.0       NaN
    '''
    # 查看前一天的数据
    dff.iloc[:,:1]
    '''
    日期  20190301
    姓名          
    周七     600.0
    张三    2000.0
    李四    1800.0
    王五     800.0
    赵六    1100.0
    钱八    1550.0
    '''
    # 交易总额小于 4000 的人的前三天业绩
    dff[dff.sum(axis = 1) < 4000].iloc[:,:3]
    '''
    日期  20190301  20190302  20190303
    姓名                              
    周七     600.0     580.0       NaN
    李四    1800.0    2180.0       NaN
    王五     800.0    1830.0       NaN
    赵六    1100.0    1050.0       NaN
    钱八    1550.0     720.0       NaN
    '''
    # 工资总额大于 2900 元的员工的姓名
    dff[dff.sum(axis = 1) > 2900].index.values
    # array(['张三', '李四'], dtype=object)
    
    # 显示前两天每一天的交易总额以及每个人的交易金额
    dataframe.pivot_table(values = '交易额',index = '姓名',
                          columns = '日期',aggfunc = 'sum',margins = True).iloc[:,:2]
    '''
    日期  20190301  20190302
    姓名                    
    周七     600.0     580.0
    张三    2000.0    1900.0
    李四    1800.0    2180.0
    王五     800.0    1830.0
    赵六    1100.0    1050.0
    钱八    1550.0     720.0
    All     7850.0    8260.0
    '''
    # 显示每个人在每个柜台的交易总额
    dff = dataframe.groupby(by = ['姓名','柜台'],as_index = False).sum()
    dff.pivot(index = '姓名',columns = '柜台',values = '交易额')
    '''
    柜台  化妆品  日用品  蔬菜水果    食品
    姓名                                  
    周七     NaN  1180.0       NaN     NaN
    张三  4600.0     NaN     600.0     NaN
    李四  3300.0     NaN     680.0     NaN
    王五     NaN     NaN     830.0  1800.0
    赵六     NaN     NaN       NaN  2150.0
    钱八     NaN  1420.0     850.0     NaN
    '''
    # 查看每人每天的上班次数
    dataframe.pivot_table(values = '交易额',index = '姓名',columns = '日期',aggfunc = 'count',margins = True).iloc[:,:1]
    '''
    日期  20190301
    姓名          
    周七       1.0
    张三       1.0
    李四       1.0
    王五       1.0
    赵六       1.0
    钱八       2.0
    All        7.0
    '''
    # 查看每个人每天购买的次数
    dataframe.pivot_table(values = '交易额',index = '姓名',columns = '日期',aggfunc = 'count',margins = True)
    '''
    日期  20190301  20190302  20190303  All
    姓名                                   
    周七       1.0       1.0       NaN    2
    张三       1.0       2.0       1.0    4
    李四       1.0       2.0       NaN    3
    王五       1.0       2.0       NaN    3
    赵六       1.0       1.0       NaN    2
    钱八       2.0       1.0       NaN    3
    All        7.0       9.0       1.0   17
    '''
    # 交叉表
    # 每个人每天上过几次班
    pd.crosstab(dataframe.姓名,dataframe.日期,margins = True).iloc[:,:2]
    '''
    日期  20190301  20190302
    姓名                    
    周七         1         1
    张三         1         2
    李四         1         2
    王五         1         2
    赵六         1         1
    钱八         2         1
    All          7         9
    '''
    # 每个人每天去过几次柜台
    pd.crosstab(dataframe.姓名,dataframe.柜台)
    '''
    柜台  化妆品  日用品  蔬菜水果  食品
    姓名                                
    周七       0       2         0     0
    张三       3       0         1     0
    李四       2       0         1     0
    王五       0       0         1     2
    赵六       0       0         0     2
    钱八       0       2         1     0
    '''
    # 将每一个人在每一个柜台的交易总额显示出来
    pd.crosstab(dataframe.姓名,dataframe.柜台,dataframe.交易额,aggfunc='sum')
    '''
    柜台  化妆品  日用品  蔬菜水果    食品
    姓名                                  
    周七     NaN  1180.0       NaN     NaN
    张三  4600.0     NaN     600.0     NaN
    李四  3300.0     NaN     680.0     NaN
    王五     NaN     NaN     830.0  1800.0
    赵六     NaN     NaN       NaN  2150.0
    钱八     NaN  1420.0     850.0     NaN
    '''
    # 每个人在每个柜台交易额的平均值,金额/天数
    pd.crosstab(dataframe.姓名,dataframe.柜台,dataframe.交易额,aggfunc = 'mean').apply(lambda  num:round(num,2) )
    '''
    柜台   化妆品  日用品  蔬菜水果    食品
    姓名                                   
    周七      NaN   590.0       NaN     NaN
    张三  1533.33     NaN     600.0     NaN
    李四  1650.00     NaN     680.0     NaN
    王五      NaN     NaN     830.0   900.0
    赵六      NaN     NaN       NaN  1075.0
    钱八      NaN   710.0     850.0     NaN
    '''

    2020-05-07

  • 相关阅读:
    java过滤器 Fliter
    input标签name、value与id属性
    python 简单的数据库操作之转账
    正则表达式基本语法
    适合新手的Python爬虫小程序
    如何使用EditPlus将json格式字符串默认为UTF-8格式
    codeforces 527C:STL set
    codeforces 527B:瞎搞
    HDU 3397 线段树
    HDU 3436:splay tree
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12844818.html
Copyright © 2020-2023  润新知