15-pandas之陣列分組的基本方法(分組大小與排序、迭代、指定組或列)
阿新 • • 發佈:2020-08-05
若()資料分組的基本方法有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