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

python中分組函數(shù)groupby和分組運(yùn)算函數(shù)agg的使用

 更新時(shí)間:2021年10月27日 10:08:38   作者:數(shù)據(jù)小白的進(jìn)階之路  
本文主要介紹了python中分組函數(shù)groupby和分組運(yùn)算函數(shù)agg的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

今天來(lái)介紹pandas中一個(gè)很有用的函數(shù)groupby,其實(shí)和hive中的groupby的效果是一樣的,區(qū)別在于兩種語(yǔ)言的寫法問(wèn)題。groupby在Python中的分組統(tǒng)計(jì)中很有用~

groupby:

首先創(chuàng)建數(shù)據(jù):

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': ['a', 'b', 'a', 'c', 'a', 'c', 'b', 'c'], 
                       'B': [2, 7, 1, 3, 3, 2, 4, 8], 
                       'C': [100, 87, 96, 130, 105, 87, 96, 155]})
df
Out[2]: 
   A  B    C
0  a  2  100
1  b  7   87
2  a  1   96
3  c  3  130
4  a  3  105
5  c  2   87
6  b  4   96

pandas中g(shù)roupby的基本操作:

1、按A列進(jìn)行分組,求B、C兩列的均值:

df.groupby('A').mean()
Out[6]: 
          B           C
A                      
a  2.000000  100.333333
b  5.500000   91.500000
c  4.333333  124.000000

當(dāng)然也可以按照多列進(jìn)行分組,獲取其他列的均值:

df.groupby(['A','B']).mean()
Out[7]: 
       C
A B     
a 1   96
  2  100
  3  105
b 4   96
  7   87
c 2   87
  3  130
  8  155

2、分組后,選擇列進(jìn)行計(jì)算:

data=df.groupby('A')
data['B'].std()
Out[11]: 
A
a    1.00000
b    2.12132
c    3.21455
Name: B, dtype: float64
 
#選擇B、C兩列
data['B','C'].mean()
Out[12]: 
          B           C
A                      
a  2.000000  100.333333
b  5.500000   91.500000
c  4.333333  124.000000

3、按A進(jìn)行分組后,可以對(duì)不同的列采用不同的聚合方法(ps:這一點(diǎn)就和hive很相像了)

data.agg({'B':'mean','C':'sum'})    #B列均值,C列匯總
Out[14]: 
     C         B
A               
a  301  2.000000
b  183  5.500000
c  372  4.333333

4、如果按照A進(jìn)行分組后,對(duì)多列采用相同的聚合方法,我們可以借助apply函數(shù):

df.groupby('A').apply(np.mean)
Out[25]: 
          B           C
A                      
a  2.000000  100.333333
b  5.500000   91.500000
c  4.333333  124.000000

5、將某列數(shù)據(jù)按數(shù)據(jù)值分成不同范圍段進(jìn)行分組運(yùn)算

創(chuàng)建數(shù)據(jù)集:

np.random.seed(0)
df = pd.DataFrame({'Age': np.random.randint(20, 70, 100), 
                        'Sex': np.random.choice(['Male', 'Female'], 100), 
                        'number_of_foo': np.random.randint(1, 20, 100)})
Out[38]: 
   Age     Sex  number_of_foo
0   64  Female             14
1   67  Female             14
2   20  Female             12
3   23    Male             17
4   23  Female             15

目標(biāo):將age字段分成三組,有如下兩種方法實(shí)現(xiàn):

#第一種方法:
1、bins=4
pd.cut(df['Age'], bins=4)
0       (56.75, 69.0]
1       (56.75, 69.0]
2     (19.951, 32.25]
3     (19.951, 32.25]
4     (19.951, 32.25]...
 
#第二種方法
2、bins=[19, 40, 65, np.inf]
pd.cut(df['Age'], bins=[19,40,65,np.inf])
Out[40]: 
0     (40.0, 65.0]
1      (65.0, inf]
2     (19.0, 40.0]
3     (19.0, 40.0]
4     (19.0, 40.0]
 
#分組范圍結(jié)果如下:
age_groups = pd.cut(df['Age'], bins=[19,40,65,np.inf])
df.groupby(age_groups).mean()
Out[43]: 
                    Age  number_of_foo
Age                                   
(19.0, 40.0]  29.840000       9.880000
(40.0, 65.0]  52.833333       9.452381
(65.0, inf]   67.375000       9.250000
 
#按‘Age'分組范圍和性別(sex)進(jìn)行制作交叉表
 
pd.crosstab(age_groups, df['Sex'])
Out[44]: 
Sex           Female  Male
Age                       
(19.0, 40.0]      22    28
(40.0, 65.0]      18    24
(65.0, inf]        3     5

agg:

1、使用groupby按照某列(A)進(jìn)行分組后,需要對(duì)另外一列采用不同的聚合方法:

df.groupby('A')['B'].agg({'mean':np.mean, 'std': np.std})
 
Out[16]: 
       std      mean
A                   
a  1.00000  2.000000
b  2.12132  5.500000
c  3.21455  4.333333

2、按照某列進(jìn)行分組后,對(duì)不同的列采用不同的聚合方法:

df.groupby('A').agg({'B':[np.mean,'sum'],'C':['count',np.std]})  #[]中對(duì)應(yīng)的是兩種方法
 
Out[17]: 
      C                    B    
  count        std      mean sum
A                               
a     3   4.509250  2.000000   6
b     2   6.363961  5.500000  11
c     3  34.394767  4.333333  13

transform:

前面兩種方法得到的結(jié)果是以A列值為索引的結(jié)果,如果使用沒(méi)有進(jìn)行g(shù)roupby分組的index的話,該怎么操作呢?此時(shí)就要用到transform函數(shù)了。transform(func, args, *kwargs) 方法簡(jiǎn)化了這個(gè)過(guò)程,: func 參數(shù)應(yīng)用到所有分組,然后把結(jié)果放置到原數(shù)組的 index 上:

df
Out[31]: 
   A  B    C
0  a  2  100
1  b  7   87
2  a  1   96
3  c  3  130
4  a  3  105
5  c  2   87
6  b  4   96
7  c  8  155
 
df.groupby('A')['B','C'].transform('count')  #注:count函數(shù)在計(jì)算時(shí),不計(jì)算nan值
Out[32]: 
   B  C
0  3  3
1  2  2
2  3  3
3  3  3
4  3  3
5  3  3
6  2  2
7  3  3

從中可以看出:按A列進(jìn)行分組,對(duì)B、C兩列進(jìn)行計(jì)數(shù)時(shí),B為a的索引有[0,2,4],所以結(jié)果列的中[0,2,4]索引的值都為3,相當(dāng)于廣播了。對(duì)于C列,同理。

到此這篇關(guān)于python中分組函數(shù)groupby和分組運(yùn)算函數(shù)agg的使用的文章就介紹到這了,更多相關(guān)python 分組函數(shù)groupby和分組運(yùn)算函數(shù)agg內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實(shí)現(xiàn)基于樸素貝葉斯的垃圾分類算法

    python實(shí)現(xiàn)基于樸素貝葉斯的垃圾分類算法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)基于樸素貝葉斯的垃圾分類算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • python實(shí)現(xiàn)讀Excel寫入.txt的方法

    python實(shí)現(xiàn)讀Excel寫入.txt的方法

    下面小編就為大家分享一篇python實(shí)現(xiàn)讀Excel寫入.txt的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 使用Python制作簡(jiǎn)單的小程序IP查看器功能

    使用Python制作簡(jiǎn)單的小程序IP查看器功能

    這篇文章主要介紹了利用Python制作簡(jiǎn)單的小程序IP查看器功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • 安裝PyInstaller失敗問(wèn)題解決

    安裝PyInstaller失敗問(wèn)題解決

    這篇文章主要介紹了安裝PyInstaller失敗問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python數(shù)據(jù)分析之Numpy庫(kù)的使用詳解

    Python數(shù)據(jù)分析之Numpy庫(kù)的使用詳解

    NumPy(Numerical Python)是Python的一種開源的數(shù)值計(jì)算擴(kuò)展。這種工具可用來(lái)存儲(chǔ)和處理大型矩陣,比Python自身的嵌套列表結(jié)構(gòu)要高效的多(該結(jié)構(gòu)也可以用來(lái)表示矩陣(matrix)),支持大量的維度數(shù)組與矩陣運(yùn)算,此外也針對(duì)數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫(kù)
    2021-11-11
  • 如何更換python默認(rèn)編輯器的背景色

    如何更換python默認(rèn)編輯器的背景色

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于如何更換python默認(rèn)編輯器的背景色的相關(guān)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-08-08
  • python爬蟲將js轉(zhuǎn)化成json實(shí)現(xiàn)示例

    python爬蟲將js轉(zhuǎn)化成json實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了python爬蟲將js轉(zhuǎn)化成json實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Python使用pydub庫(kù)對(duì)mp3與wav格式進(jìn)行互轉(zhuǎn)的方法

    Python使用pydub庫(kù)對(duì)mp3與wav格式進(jìn)行互轉(zhuǎn)的方法

    今天小編就為大家分享一篇Python使用pydub庫(kù)對(duì)mp3與wav格式進(jìn)行互轉(zhuǎn)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python替換字符串replace()函數(shù)使用方法詳解

    Python替換字符串replace()函數(shù)使用方法詳解

    Python中的replace()方法是把字符串中的old(舊字符串)替換成new(新字符串),如果指定第三個(gè)參數(shù)max,則替換次數(shù)不超過(guò)max次(將舊的字符串用心的字符串替換不超過(guò)max次,本文就給大家講講Python replace()函數(shù)的使用方法,需要的朋友可以參考下
    2023-07-07
  • python 返回一個(gè)列表中第二大的數(shù)方法

    python 返回一個(gè)列表中第二大的數(shù)方法

    今天小編就為大家分享一篇python 返回一個(gè)列表中第二大的數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07

最新評(píng)論