一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python pandas分組聚合詳細

python pandas分組聚合詳細

2021-12-28 00:16FTDdata Python

分組聚合是數據處理中常見的場景,在pandas中用groupby方法實現分組操作,用agg方法實現聚合操作,在這篇文章里有主要介紹,感興趣的朋友請參考下文

python pandas分組聚合

1、環境

  • python3.9
  • win10 64bit
  • pandas==1.2.1

groupby方法是pandas中的分組方法,對數據框采用groupby方法后,返回的是DataFrameGroupBy對象,一般分組操作后會進行聚合操作。

2、分組

?
1
2
3
4
5
6
import pandas as pd
import numpy as np
pd.set_option('display.notebook_repr_html',False)
# 數據準備
df = pd.DataFrame({'A': [1, 1, 2, 2],'B': [1, 2, 3, 4],'C':[6,8,1,9]})
df
?
1
2
3
4
5
      A  B  C
0  1  1  6
1  1  2  8
2  2  3  1
3  2  4  9

對數據框按A列進行分組,產生分組數據框。分組數據框是可迭代對象,可以進行循環遍歷,可以看出在循環中,每個元素的類型是元組,

元組的第一個元素是分組值,第二個元素是對應的分組數據框。

?
1
2
3
4
# 分組
g_df=df.groupby('A')
# 分組數據框類
type(g_df)
?
1
pandas.core.groupby.generic.DataFrameGroupBy
?
1
2
3
# 循環分組數據
for i in g_df:
    print(i,type(i),end='\n\n')
?
1
2
3
(1,    A  B  C
0  1  1  6
1  1  2  8) <class 'tuple'>
?
1
2
3
(2,    A  B  C
2  2  3  1
3  2  4  9) <class 'tuple'>

可以對分組后的數據框直接使用聚合方法agg,對分組數據框的每一列計算統計函數值。

?
1
2
3
4
5
6
# 分組求和
df.groupby('A').agg('sum')
   B   C
A      
1  3  14
2  7  10

3、序列分組

可以根據數據框外的序列數據對數據框進行分組,需要注意序列長度需要與數據框行數相同。

?
1
2
3
4
5
6
7
# 定義分組列表
label=['a','a','b','b']
# 分組求和
df.groupby(label).agg('sum')
   A  B   C
2  3  14
4  7  10

4、多列分組

可以根據數據框的多列對數據框進行分組。

?
1
2
3
# 數據準備
df = pd.DataFrame({'A': [1, 1, 2, 2],'B': [3, 4, 3, 3],'C':[6,8,1,9]})
df
?
1
2
3
4
5
   A  B  C
0  1  3  6
1  1  4  8
2  2  3  1
3  2  3  9

根據A,B列進行分組,然后求和。

?
1
2
# 根據多列分組求和
df.groupby(['A','B']).agg('sum')
?
1
2
3
4
5
      C
A B   
1 3   6
  4   8
2 3  10

5、索引分組

可以根據索引對數據框進行分組,需要設置level參數。

?
1
2
3
# 數據準備
df = pd.DataFrame({'A': [1, 1, 2, 2],'B': [3, 4, 3, 3],'C':[6,8,1,9]},index=['a','a','b','b'])
df
?
1
2
3
4
5
   A  B  C
1  3  6
1  4  8
2  3  1
2  3  9

數據框只有一層索引,設置參數level=0

?
1
2
3
4
5
# 根據索引分組求和
df.groupby(level=0).agg('sum')
   A  B   C
2  7  14
4  6  10

當數據框索引有多層時,也可以根據需求設置level參數,完成分組聚合。

?
1
2
3
4
# 數據準備
mi=pd.MultiIndex.from_arrays([[1,1,2,2],[3,4,3,3]],names=['id1','id2'])
df=pd.DataFrame(dict(value=[4,7,2,9]),index=mi)
df
?
1
2
3
4
5
6
         value
id1 id2      
1   3        4
    4        7
2   3        2
    3        9

設置level參數,如需要根據第一層索引,即id1進行分組,可以設置level=0level='id1'完成分組聚合。

?
1
2
# 根據第一層索引分組求和
df.groupby(level=0).agg('sum')
?
1
2
3
4
     value
id1      
1       11
2       11
?
1
2
3
# 根據第一層索引分組求和
df.groupby(level='id1').agg('sum')
?
1
2
3
4
    value
id1      
1       11
2       11

7、聚合

分組后一般會進行聚合操作,用agg方法進行聚合。

?
1
2
3
# 數據準備
df = pd.DataFrame({'A': [1, 1, 2, 2],'B': [3, 4, 3, 3],'C':[6,8,1,9],'D':[2,5,4,8]})
df
?
1
2
3
4
5
   A  B  C  D
0  1  3  6  2
1  1  4  8  5
2  2  3  1  4
3  2  3  9  8

8、單函數對多列

對分組后數據框使用單個函數進行聚合,單個聚合函數會對每列進行計算,然后合并返回。聚合函數以字符串的形式傳入。

?
1
2
# 對所有列分組求和
df.groupby('A').agg('sum')
?
1
2
3
4
   B   C   D
A          
1  7  14   7
2  6  10  12

可以對分組后的數據指定列進行分組聚合。需要注意子列需要用[]包裹

?
1
2
# 對指定列分組求和
df.groupby('A')[['B','C']].agg('sum')
?
1
2
3
4
   B   C
A      
1  7  14
2  6  10

聚合函數也可以傳入自定義的匿名函數。

?
1
2
# 匿名函數分組求和
df.groupby('A').agg(lambda x:sum(x))
?
1
2
3
4
  B   C   D
A          
1  7  14   7
2  6  10  12

9、多函數對多列

聚合函數可以是多個函數。聚合時,多個聚合函數會對每列進行計算,然后合并返回。聚合函數以列表的形式傳入。

?
1
2
# 全部列多函數聚合
df.groupby('A').agg(['sum','mean'])
?
1
2
3
4
5
    B        C        D    
  sum mean sum mean sum mean
A                          
1   7  3.5  14    7   7  3.5
2   6  3.0  10    5  12  6.0

聚合返回后的數據列名有兩層索引,第一層是聚合的列名,第二層是使用的聚合函數名。如果需要對返回的聚合函數名重命名,
需要在傳參時,傳入元組,第一個元素為聚合函數名,第二個元素為聚合函數。

?
1
2
# 聚合函數重命名
df.groupby('A').agg([('SUM','sum'),('MEAN','mean')])
?
1
2
3
4
5
    B        C        D    
  SUM MEAN SUM MEAN SUM MEAN
A                          
1   7  3.5  14    7   7  3.5
2   6  3.0  10    5  12  6.0

同樣,也可以傳入匿名函數。

?
1
2
# 匿名函數并重命名
df.groupby('A').agg([('SUM','sum'),('MAX',lambda x:max(x))])
?
1
2
3
4
5
    B       C       D   
  SUM MAX SUM MAX SUM MAX
A                       
1   7   4  14   8   7   5
2   6   3  10   9  12   8

如果需要對不同的列進行不同的聚合計算,則需要傳入字典的形式。

?
1
2
# 不同列不同聚合函數
df.groupby('A').agg({'B':['sum','mean'],'C':'mean'})
?
1
2
3
4
5
    B         C
  sum mean mean
A             
1   7  3.5    7
2   6  3.0    5

可以重命名聚合后的列名,注意只能對一列傳入一個聚合函數時有效

?
1
2
# 聚合后重命名列名
df.groupby('A').agg(B_sum=('B','sum'),C_mean=('C','mean'))
?
1
2
3
4
   B_sum  C_mean
A              
1      7       7
2      6       5

到此這篇關于python pandas分組聚合詳細的文章就介紹到這了,更多相關python pandas分組聚合內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.jianshu.com/p/bd8d6ba29d0e

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久国产加勒比精品无码 | 紧身短裙女教师波多野 | www.羞羞视频 | 亚洲欧美一区二区三区在饯 | 99热在线观看免费 | 国产拍拍拍 | 国产麻豆麻豆 | 日本欧美不卡一区二区三区在线 | v视影院| 欧美国产日产精品免费视频 | 日韩一区二区三区不卡视频 | a毛片久久免费观看 | 久草草在线视视频 | 全彩孕交漫画福利啪啪吧 | 教室眠催白丝美女校花 | 人成午夜免费大片在线观看 | 亚洲精品国产专区91在线 | 奇米影视777最新在线 | 狠狠色婷婷狠狠狠亚洲综合 | 日韩无砖专区2020在线 | 四虎影院精品 | 性派对videos18party | 国产精品久久久久久岛国 | 欧美色成人tv在线播放 | 男人香蕉好大好爽视频 | 女子监狱第二季在线观看免费完整版 | 久久人妻少妇嫩草AV无码 | 精品一区二区三区在线成人 | 亚洲成人黄色网址 | 亚洲精品第二页 | 国产精品久久毛片完整版 | 无码乱人伦一区二区亚洲一 | 国产成人精品免费视频软件 | 日韩欧美综合在线二区三区 | 色综合久久久 | 999热在线精品观看全部 | 911爱豆传媒国产 | 网红刘婷hd国产高清 | 亚洲欧美专区精品伊人久久 | 亚洲国产天堂综合一区 | 欧美日韩一区二区综合 |