pandas 聚合 df.groupby.agg

矢細順修發表於2020-10-26
#df.groupby.agg ( arg,  *args,  **kwargs )
#聚合:使用可呼叫、字串、dict或字串/可呼叫列表進行聚合

import pandas as pd

df = pd.DataFrame({'A':['a','a','b','c','b','c','d'],
                   'B':[4,5,3,6,7,3,2],
                   'C':[22,21,43,55,31,55,66],
                   'D':[123,223,441,554,234,665,772]})
print(df)
#分組
df_groupby = df.groupby('A')
print('組內的鍵值:\n{}'.format(df_groupby.groups.keys()))
print("觀察其中某組 'a':\n{}".format(df.iloc[df_groupby.groups['a']]))
print('檢視所有分組:')
for index,data in df_groupby:
    print(index)
    print(data)
#多列分組
df_grb_morecols = df.groupby(['A','B'])
print('組內的鍵值:\n{}'.format(df_grb_morecols.groups.keys()))
print("觀察其中某組 ('a', 4):\n{}".format(df.iloc[df_grb_morecols.groups[('a', 4)]]))
print('檢視所有分組:')

for index,data in df_grb_morecols:
    print(index)
    print(data)
#聚合
#預設情況對分組之後其他列進行聚合

df_agg = df.groupby('A').agg(['min','mean','max'])
print(df_agg)
#對分組後的部分列進行聚合
#某些情況,只需要對部分資料進行不同的聚合操作,可以通過字典來構建
num_agg = {'C':['min','mean','max']}
print('部分列進行聚合:\n{}'.format(df.groupby('A').agg(num_agg)))

num_agg = {'C':['min','mean','max'],'D':['min','max']}
print('部分列進行聚合:\n{}'.format(df.groupby('A').agg(num_agg)))

輸出結果:

   A  B   C    D
0  a  4  22  123
1  a  5  21  223
2  b  3  43  441
3  c  6  55  554
4  b  7  31  234
5  c  3  55  665
6  d  2  66  772
組內的鍵值:
dict_keys(['a', 'b', 'c', 'd'])
觀察其中某組 'a':
   A  B   C    D
0  a  4  22  123
1  a  5  21  223
檢視所有分組:
a
   A  B   C    D
0  a  4  22  123
1  a  5  21  223
b
   A  B   C    D
2  b  3  43  441
4  b  7  31  234
c
   A  B   C    D
3  c  6  55  554
5  c  3  55  665
d
   A  B   C    D
6  d  2  66  772
組內的鍵值:
dict_keys([('a', 4), ('a', 5), ('b', 3), ('b', 7), ('c', 3), ('c', 6), ('d', 2)])
觀察其中某組 ('a', 4):
   A  B   C    D
0  a  4  22  123
檢視所有分組:
('a', 4)
   A  B   C    D
0  a  4  22  123
('a', 5)
   A  B   C    D
1  a  5  21  223
('b', 3)
   A  B   C    D
2  b  3  43  441
('b', 7)
   A  B   C    D
4  b  7  31  234
('c', 3)
   A  B   C    D
5  c  3  55  665
('c', 6)
   A  B   C    D
3  c  6  55  554
('d', 2)
   A  B   C    D
6  d  2  66  772
    B            C              D            
  min mean max min  mean max  min   mean  max
A                                            
a   4  4.5   5  21  21.5  22  123  173.0  223
b   3  5.0   7  31  37.0  43  234  337.5  441
c   3  4.5   6  55  55.0  55  554  609.5  665
d   2  2.0   2  66  66.0  66  772  772.0  772
部分列進行聚合:
    C          
  min  mean max
A              
a  21  21.5  22
b  31  37.0  43
c  55  55.0  55
d  66  66.0  66
部分列進行聚合:
    C              D     
  min  mean max  min  max
A                        
a  21  21.5  22  123  223
b  31  37.0  43  234  441
c  55  55.0  55  554  665
d  66  66.0  66  772  772
>>>