zoukankan      html  css  js  c++  java
  • 5-pandas数组分组的基本方法(分组大小与排序、迭代、指定组或列)

    数据分组的基本方法有3种:

    1. 分组大小和分组排序
    2. 对分组进行迭代
    3. 选择指定组或指定的列

    一、分组大小和分组排序

      可通过GroupBy对象的size()方法,知道每个分组的样本数;

    >>> df.groupby(['class']).size()
    class
    A    3
    B    4
    C    2
    dtype: int64
    
    >>> df.groupby(['class','sex']).size()
    class  sex
    A      female    1
           male      2
    B      female    2
           male      2
    C      male      2
    dtype: int64
    

      默认情况下,分组聚合后的索引会进行排序,可能会降低运行速度,所以,在数据量很大的时候可以设置sort = False,指定不进行排序以提高分组速度

    >>> df.groupby('class',sort = False).mean()
           score_math  score_music
    class
    A            93.0        85.00
    B            86.5        79.75
    C            76.0        90.50

    二、对分组进行迭代

      GroupBy对象是一个可迭代对象,所以可以通过迭代获取分组名和数据;

     例如:获取班级的分组名和数据(若按多个键进行分组,则分组名变成元组

    >>> grouped = df.groupby('class')
    >>> for name,group in grouped:
    ...     print(name)
    ...     print(group)
    ...     print('-'*40)
    
    A
      class     sex  score_math  score_music
    0     A    male          95           79
    1     A  female          96           90
    7     A    male          88           86
    ----------------------------------------
    B
      class     sex  score_math  score_music
    2     B  female          85           85
    4     B  female          84           90
    5     B    male          88           70
    8     B    male          89           74
    ----------------------------------------
    C
      class   sex  score_math  score_music
    3     C  male          93           92
    6     C  male          59           89
    ----------------------------------------

    三、选择指定组或指定的列

       (1)将分组名及其数据封装成一个字典,便于后序选择指定组的数据;

      值得注意的是:不可直接将GroupBy对象打包成字典,必须先将其转化成包含多个元组的列表,才能使用dict()将其转换成字典。

    >>> grouped = df.groupby('class')
    >>> pieces = dict(list(grouped))
    
    >>> len(pieces)
    3
    
    >>> pieces.keys()
    dict_keys(['A', 'B', 'C'])
    
    >>> pieces['A']
      class     sex  score_math  score_music
    0     A    male          95           79
    1     A  female          96           90
    7     A    male          88           86
    

      (2)GroupBy对象的get_group()也可以达到同样的效果而且更直观

    >>> grouped.get_group('A')
      class     sex  score_math  score_music
    0     A    male          95           79
    1     A  female          96           90
    7     A    male          88           86
    

      (3)若只需要对指定的列进行GroupBy操作,只需在groupby()后加上指定的列即可

    >>> df.groupby('class')['score_math'].mean()
    class
    A    93.0
    B    86.5
    C    76.0
    
    >>> df.groupby('class')['score_math','score_music'].mean()
           score_math  score_music
    class
    A            93.0        85.00
    B            86.5        79.75
    C            76.0        90.50
    

      

  • 相关阅读:
    CodeForces 1017B
    POJ 1323-Game Prediction(贪心)
    CodeForces 104B-Testing Pants for Sadness(思维题)
    CodeForces 1324D
    UVA 1152-4 Values whose Sum is 0(二分查找)
    POJ 1700-Crossing River(贪心)
    HDU 1789-Doing Homework again(并查集+贪心)
    SDUT 1298-活动选择(贪心)
    HDU 1272-小希的迷宫(带环并查集)
    CodeForces
  • 原文地址:https://www.cnblogs.com/Cheryol/p/13443195.html
Copyright © 2011-2022 走看看