zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    识别验证码
    Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇)
    Intellij IDEA新建maven项目和配置tomcat
    Intellij IDEA 14使用maven3.3.3 问题
    使用Xshell连接Ubuntu
    IntelliJ IDEA 12 详细开发教程(二)Tomcat服务配置与Jrebel热部署
    git使用
    e.keycode详解
    jquery插件制作教程 txtHover(转载)
    深入理解JavaScript系列(转载)
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12844831.html
Copyright © 2011-2022 走看看