添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

默认情况下,分组聚合后的索引会进行排序 ,可能会降低运行速度,所以,在 数据量很大的时候可以设置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)
  class     sex  score_math  score_music
0     A    male          95           79
1     A  female          96           90
7     A    male          88           86
----------------------------------------
  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
----------------------------------------
  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)
>>> 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