中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用python中分組函數groupby和分組運算函數agg

發布時間:2021-10-27 11:08:51 來源:億速云 閱讀:599 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么使用python中分組函數groupby和分組運算函數agg”,在日常操作中,相信很多人在怎么使用python中分組函數groupby和分組運算函數agg問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用python中分組函數groupby和分組運算函數agg”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

groupby:

首先創建數據:

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中groupby的基本操作:

1、按A列進行分組,求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

當然也可以按照多列進行分組,獲取其他列的均值:

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、分組后,選擇列進行計算:

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進行分組后,可以對不同的列采用不同的聚合方法(ps:這一點就和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進行分組后,對多列采用相同的聚合方法,我們可以借助apply函數:

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、將某列數據按數據值分成不同范圍段進行分組運算

創建數據集:

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

目標:將age字段分成三組,有如下兩種方法實現:

#第一種方法:
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]
 
#分組范圍結果如下:
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)進行制作交叉表
 
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)進行分組后,需要對另外一列采用不同的聚合方法:

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、按照某列進行分組后,對不同的列采用不同的聚合方法:

df.groupby('A').agg({'B':[np.mean,'sum'],'C':['count',np.std]})  #[]中對應的是兩種方法
 
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:

前面兩種方法得到的結果是以A列值為索引的結果,如果使用沒有進行groupby分組的index的話,該怎么操作呢?此時就要用到transform函數了。transform(func, args, *kwargs) 方法簡化了這個過程,: func 參數應用到所有分組,然后把結果放置到原數組的 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函數在計算時,不計算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列進行分組,對B、C兩列進行計數時,B為a的索引有[0,2,4],所以結果列的中[0,2,4]索引的值都為3,相當于廣播了。對于C列,同理。

到此,關于“怎么使用python中分組函數groupby和分組運算函數agg”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

两当县| 宝丰县| 云和县| 多伦县| 天台县| 宁夏| 高台县| 南宫市| 海城市| 黔西| 广南县| 丰城市| 朝阳县| 永川市| 克东县| 桃源县| 新和县| 建瓯市| 自治县| 望奎县| 成都市| 曲水县| 汉阴县| 河间市| 汾西县| 宜春市| 济阳县| 阳西县| 若尔盖县| 安西县| 澄城县| 兴仁县| 昌黎县| 兰州市| 南木林县| 太仆寺旗| 凤台县| 巍山| 岢岚县| 大城县| 阜平县|