• 5-Pandas数据聚合(GroupBy.agg())


      数据聚合除了GroupBy.mean()的聚合方法外,另一种直观的方法是直接接在GroupBy对象之后;

    例:

    >>> import pandas as pd
    >>> df = pd.read_excel('./input/class.xlsx')
    >>> df
      class     sex  score_math  score_music
    0     A    male          95           79
    1     A  female          96           90
    2     B  female          85           85
    3     C    male          93           92
    4     B  female          84           90
    5     B    male          88           70
    6     C    male          59           89
    7     A    male          88           86
    8     B    male          89           74
    #先对其进行GroupBy操作
    >>> grouped = df.groupby('class')
    #以下两种方式的结果完全相同
    >>> grouped.sum()
           score_math  score_music
    class
    A             279          255
    B             346          319
    C             152          181
    
    >>> grouped.agg('sum')
           score_math  score_music
    class
    A             279          255
    B             346          319
    C             152          181
    

      可以同时使用多个聚合函数(使用列表的格式),其结果将包含一个层次化索引,新加的索引名称是函数的名称。

    >>> grouped.agg([np.sum,np.mean])
          score_math       score_music
                 sum  mean         sum   mean
    class
    A            279  93.0         255  85.00
    B            346  86.5         319  79.75
    C            152  76.0         181  90.50
    

      数据聚合也可使用自定义聚合函数:自定义的函数必须具有聚合的作用,若传入一个一个数组(1维),必须只能返回标量值(0维)

    需要注意的是:在构造中间分组数据块时可能存在函数调用、数据重排等较大的开销。

    >>> grouped.agg([np.sum,lambda x:x.max()-x.min()])
          score_math          score_music
                 sum <lambda>         sum <lambda>
    class
    A            279        8         255       11
    B            346        5         319       20
    C            152       34         181        3
    

      列表中传入一个二元元组(函数名,函数),可以更改列名

    >>> grouped.agg([('sum',np.sum),('range',lambda x:x.max()-x.min())])
          score_math       score_music
                 sum range         sum range
    class
    A            279     8         255    11
    B            346     5         319    20
    C            152    34         181     3
    

      对于不同的列执行不同的聚合运算,可以向agg()函数传入一个字典,将多个函数运用到至少一列时,聚合结果才会拥有层次化索引

    所以,在单独的运用一个函数时,若需要显示层次化索引,就可以使用列表的形式“假装”要对某一列运用多个聚合运算。

    >>> map_func = {'score_math':[np.mean,np.max],'score_music':[np.mean,np.min]}
    >>> grouped.agg(map_func)
          score_math      score_music
                mean amax        mean amin
    class
    A           93.0   96       85.00   79
    B           86.5   89       79.75   70
    C           76.0   93       90.50   89
    
    #假装要对某一列进行多个聚合运算,以达到层次化索引的结果
    >>> map_func = {'score_math':[np.max],'score_music':[np.min]}
    >>> grouped.agg(map_func)
          score_math score_music
                amax        amin
    class
    A             96          79
    B             89          70
    C             93          89
    

      

  • 相关阅读:
    协程的嵌套
    利用excl的数据源表,手动选择品牌,根据品牌自动出现品牌的品牌类型、品牌型号、单价、质量等信息。
    uniapp实现薪资区间范围选择
    html2canvas + jspdf 实现html导出pdf并加水印
    jq实现薪资区间值选择
    C/C++中的函数指针的写法
    linux系统find命令的一些使用技巧
    RunAsDate改变软件获取系统时间工具
    电子政务及安全研究报告
    数据转换位串字节数组
  • 原文地址:https://www.cnblogs.com/Cheryol/p/13452011.html
Copyright © 2020-2023  润新知