欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python pandas分組聚合詳細

 更新時間:2021年09月01日 14:27:31   作者:FTDdata  
分組聚合是數(shù)據(jù)處理中常見的場景,在pandas中用groupby方法實現(xiàn)分組操作,用agg方法實現(xiàn)聚合操作,在這篇文章里有主要介紹,感興趣的朋友請參考下文

python pandas分組聚合

1、環(huán)境

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

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

2、分組

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

      A  B  C
0  1  1  6
1  1  2  8
2  2  3  1
3  2  4  9

對數(shù)據(jù)框按A列進行分組,產(chǎn)生分組數(shù)據(jù)框。分組數(shù)據(jù)框是可迭代對象,可以進行循環(huán)遍歷,可以看出在循環(huán)中,每個元素的類型是元組,

元組的第一個元素是分組值,第二個元素是對應的分組數(shù)據(jù)框。

# 分組
g_df=df.groupby('A')
# 分組數(shù)據(jù)框類
type(g_df)
pandas.core.groupby.generic.DataFrameGroupBy

# 循環(huán)分組數(shù)據(jù)
for i in g_df:
    print(i,type(i),end='\n\n')

(1,    A  B  C
0  1  1  6
1  1  2  8) <class 'tuple'>

(2,    A  B  C
2  2  3  1
3  2  4  9) <class 'tuple'>

可以對分組后的數(shù)據(jù)框直接使用聚合方法agg,對分組數(shù)據(jù)框的每一列計算統(tǒng)計函數(shù)值。

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

3、序列分組

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

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

4、多列分組

可以根據(jù)數(shù)據(jù)框的多列對數(shù)據(jù)框進行分組。

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


   A  B  C
0  1  3  6
1  1  4  8
2  2  3  1
3  2  3  9


根據(jù)A,B列進行分組,然后求和。

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

5、索引分組

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

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


   A  B  C
a  1  3  6
a  1  4  8
b  2  3  1
b  2  3  9


數(shù)據(jù)框只有一層索引,設置參數(shù)level=0

# 根據(jù)索引分組求和
df.groupby(level=0).agg('sum')
   A  B   C
a  2  7  14
b  4  6  10


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

# 數(shù)據(jù)準備
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


         value
id1 id2       
1   3        4
    4        7
2   3        2
    3        9


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

# 根據(jù)第一層索引分組求和
df.groupby(level=0).agg('sum')


     value
id1       
1       11
2       11


# 根據(jù)第一層索引分組求和
df.groupby(level='id1').agg('sum')
 

    value
id1       
1       11
2       11

7、聚合

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

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


   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、單函數(shù)對多列

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

# 對所有列分組求和
df.groupby('A').agg('sum')


   B   C   D
A           
1  7  14   7
2  6  10  12


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

# 對指定列分組求和
df.groupby('A')[['B','C']].agg('sum')


   B   C
A       
1  7  14
2  6  10


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

# 匿名函數(shù)分組求和
df.groupby('A').agg(lambda x:sum(x))


  B   C   D
A           
1  7  14   7
2  6  10  12

9、多函數(shù)對多列

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

# 全部列多函數(shù)聚合
df.groupby('A').agg(['sum','mean'])


    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


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

# 聚合函數(shù)重命名
df.groupby('A').agg([('SUM','sum'),('MEAN','mean')])

    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


同樣,也可以傳入匿名函數(shù)。

# 匿名函數(shù)并重命名
df.groupby('A').agg([('SUM','sum'),('MAX',lambda x:max(x))])


    B       C       D    
  SUM MAX SUM MAX SUM MAX
A                        
1   7   4  14   8   7   5
2   6   3  10   9  12   8


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

# 不同列不同聚合函數(shù)
df.groupby('A').agg({'B':['sum','mean'],'C':'mean'})


    B         C
  sum mean mean
A              
1   7  3.5    7
2   6  3.0    5


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

# 聚合后重命名列名
df.groupby('A').agg(B_sum=('B','sum'),C_mean=('C','mean'))


   B_sum  C_mean
A               
1      7       7
2      6       5

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

相關文章

  • 詳解python網(wǎng)絡進程

    詳解python網(wǎng)絡進程

    進程是一個具有一定獨立功能的程序關于某個數(shù)據(jù)集合的一次運行活動。它是操作系統(tǒng)動態(tài)執(zhí)行的基本單元,在傳統(tǒng)的操作系統(tǒng)中,進程既是基本的分配單元,也是基本的執(zhí)行單元。本文將介紹python實現(xiàn)網(wǎng)絡進程
    2021-06-06
  • 在Pycharm中對代碼進行注釋和縮進的方法詳解

    在Pycharm中對代碼進行注釋和縮進的方法詳解

    今天小編就為大家分享一篇在Pycharm中對代碼進行注釋和縮進的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 用基于python的appium爬取b站直播消費記錄

    用基于python的appium爬取b站直播消費記錄

    因工作需要,需要爬取相關數(shù)據(jù),之前是爬取網(wǎng)頁數(shù)據(jù),可以用python的requests和Selenium進行爬取。但b站的直播消費數(shù)據(jù)網(wǎng)頁版不能顯示,只能在手機上看到,所以就有了這篇文章。需要的朋友可以參考下
    2021-04-04
  • 淺談tensorflow之內存暴漲問題

    淺談tensorflow之內存暴漲問題

    今天小編就為大家分享一篇淺談tensorflow之內存暴漲問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python 生成不重復的隨機數(shù)的代碼

    python 生成不重復的隨機數(shù)的代碼

    用的是篩選法,網(wǎng)上有解釋,簡單的說 就是先隨機生成一串數(shù)字,之后用下標來判斷這些數(shù)字有沒有重復,重復的就篩去
    2011-05-05
  • opencv背景替換加載的實現(xiàn)示例

    opencv背景替換加載的實現(xiàn)示例

    本文主要介紹了opencv背景替換加載的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • python如何將兩個數(shù)據(jù)表中的對應數(shù)據(jù)相加

    python如何將兩個數(shù)據(jù)表中的對應數(shù)據(jù)相加

    這篇文章主要介紹了python如何將兩個數(shù)據(jù)表中的對應數(shù)據(jù)相加問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python學習之Anaconda的使用與配置方法

    Python學習之Anaconda的使用與配置方法

    我在學習Python的爬蟲框架中看到看到了anaconda的介紹,簡直是相見恨晚啊,我覺的每個Python的學習網(wǎng)站上首先都應該使用anaconda來進行教程,因為在實踐的過程中光環(huán)境的各種報錯就能消磨掉你所有的學習興趣
    2018-01-01
  • Pycharm使用CV2的詳細圖文教程

    Pycharm使用CV2的詳細圖文教程

    在Windows操作系統(tǒng)下安裝Python3和OpenCV庫后,通過安裝并配置PyCharm開發(fā)環(huán)境,可以直接顯示并調用已安裝的包,例如使用cv2庫的接口進行編程和項目開發(fā),文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • Python Request類源碼實現(xiàn)方法及原理解析

    Python Request類源碼實現(xiàn)方法及原理解析

    這篇文章主要介紹了Python Request類源碼實現(xiàn)方法及原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08

最新評論