• pandas_分类与聚合


    # 分组与聚合
    import pandas as pd
    import numpy as np
    
    # 设置列对齐
    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',
                              usecols = ['工号','姓名','时段','交易额','柜台'])
    
    # 对 5 的余数进行分组
    dataframe.groupby(by = lambda num:num % 5)['交易额'].sum()
    '''
    0    4530
    1    5000
    2    1980
    3    3120
    4    2780
    Name: 交易额, dtype: int64
    '''
    # 查看索引为 7 15 的交易额
    dataframe.groupby(by = {7:'索引为7的行',15:'索引为15的行'})['交易额'].sum()
    '''
    索引为15的行    830
    索引为7的行     600
    Name: 交易额, dtype: int64
    '''
    # 查看不同时段的交易总额
    dataframe.groupby(by = '时段')['交易额'].sum()
    '''
    时段
    14:00-21:00    8300
    9:00-14:00     9110
    Name: 交易额, dtype: int64
    '''
    # 各柜台的销售总额
    dataframe.groupby(by = '柜台')['交易额'].sum()
    '''
    柜台
    化妆品      7900
    日用品      2600
    蔬菜水果    2960
    食品        3950
    Name: 交易额, dtype: int64
    '''
    # 查看每个人在每个时段购买的次数
    count = dataframe.groupby(by = '姓名')['时段'].count()
    '''
    姓名
    周七    2
    张三    4
    李四    3
    王五    3
    赵六    2
    钱八    3
    Name: 时段, dtype: int64
    '''
    #
    count.name = '交易人和次数'
    '''
    
    '''
    # 每个人的交易额平均值并排序
    dataframe.groupby(by = '姓名')['交易额'].mean().round(2).sort_values()
    '''
    姓名
    周七     590.00
    钱八     756.67
    王五     876.67
    赵六    1075.00
    张三    1300.00
    李四    1326.67
    Name: 交易额, dtype: float64
    '''
    
    # 每个人的交易额,apply(int) 转换为整数
    dataframe.groupby(by = '姓名').sum()['交易额'].apply(int)
    '''
    姓名
    周七    1180
    张三    5200
    李四    3980
    王五    2630
    赵六    2150
    钱八    2270
    Name: 交易额, dtype: int64
    '''
    # 每一个员工交易额的中值
    data = dataframe.groupby(by = '姓名').median()
    '''
          工号  交易额
    姓名              
    周七  1005     590
    张三  1001    1300
    李四  1002    1500
    王五  1003     830
    赵六  1004    1075
    钱八  1006     720
    '''
    data['交易额']
    '''
    姓名
    周七     590
    张三    1300
    李四    1500
    王五     830
    赵六    1075
    钱八     720
    Name: 交易额, dtype: int64
    '''
    # 查看交易额对应的排名
    data['排名'] = data['交易额'].rank(ascending = False)
    data[['交易额','排名']]
    '''
          交易额  排名
    姓名              
    周七     590   6.0
    张三    1300   2.0
    李四    1500   1.0
    王五     830   4.0
    赵六    1075   3.0
    钱八     720   5.0
    '''
    # 每个人不同时段的交易额
    dataframe.groupby(by = ['姓名','时段'])['交易额'].sum()
    '''
    姓名  时段       
    周七  9:00-14:00     1180
    张三  14:00-21:00     600
          9:00-14:00     4600
    李四  14:00-21:00    3300
          9:00-14:00      680
    王五  14:00-21:00     830
          9:00-14:00     1800
    赵六  14:00-21:00    2150
    钱八  14:00-21:00    1420
          9:00-14:00      850
    Name: 交易额, dtype: int64
    '''
    # 设置各时段累计
    dataframe.groupby(by = ['姓名'])['时段','交易额'].aggregate({'交易额':np.sum,'时段':lambda x:'各时段累计'})
    '''
          交易额        时段
    姓名                    
    周七    1180  各时段累计
    张三    5200  各时段累计
    李四    3980  各时段累计
    王五    2630  各时段累计
    赵六    2150  各时段累计
    钱八    2270  各时段累计
    '''
    # 对指定列进行聚合,查看最大,最小,和,平均值,中值
    dataframe.groupby(by = '姓名').agg(['max','min','sum','mean','median'])
    '''
          工号                          交易额                                
           max   min   sum  mean median    max   min   sum         mean median
    姓名                                                                      
    周七  1005  1005  2010  1005   1005    600   580  1180   590.000000    590
    张三  1001  1001  4004  1001   1001   2000   600  5200  1300.000000   1300
    李四  1002  1002  3006  1002   1002   1800   680  3980  1326.666667   1500
    王五  1003  1003  3009  1003   1003   1000   800  2630   876.666667    830
    赵六  1004  1004  2008  1004   1004   1100  1050  2150  1075.000000   1075
    钱八  1006  1006  3018  1006   1006    850   700  2270   756.666667    720
    '''
    # 查看部分聚合后的结果
    dataframe.groupby(by = '姓名').agg(['max','min','sum','mean','median'])['交易额']
    '''
           max   min   sum         mean  median
    姓名                                       
    周七   600   580  1180   590.000000     590
    张三  2000   600  5200  1300.000000    1300
    李四  1800   680  3980  1326.666667    1500
    王五  1000   800  2630   876.666667     830
    赵六  1100  1050  2150  1075.000000    1075
    钱八   850   700  2270   756.666667     720
    '''

    2020-05-07

  • 相关阅读:
    代码格式化[转]
    ASP.NET错误大杂烩
    Web考勤管理系统 .net 2005 开发
    Ftp 类
    c#中Split等分割字符串的几种方法
    强大的firebug 使用 介绍
    一页面多个文本框回车提交不同事件问题解决
    Ajax电子书下载 发现的好东东贴上了
    编程技术书籍[转]
    推荐下权威的《IT十年经典书系列》1打
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12844831.html
Copyright © 2020-2023  润新知