国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

服務器之家 - 腳本之家 - Python - python中分組函數groupby和分組運算函數agg的使用

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

2022-02-18 10:23數據小白的進階之路 Python

本文主要介紹了python中分組函數groupby和分組運算函數agg的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

今天來介紹pandas中一個很有用的函數groupby,其實和hive中的groupby的效果是一樣的,區別在于兩種語言的寫法問題。groupby在Python中的分組統計中很有用~

groupby:

首先創建數據:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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  2  100
1  7   87
2  1   96
3  3  130
4  3  105
5  2   87
6  4   96

pandas中groupby的基本操作:

1、按A列進行分組,求B、C兩列的均值:

?
1
2
3
4
5
6
7
df.groupby('A').mean()
Out[6]:
          B           C
A                     
2.000000  100.333333
5.500000   91.500000
4.333333  124.000000

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

?
1
2
3
4
5
6
7
8
9
10
11
12
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、分組后,選擇列進行計算:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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                     
2.000000  100.333333
5.500000   91.500000
4.333333  124.000000

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

?
1
2
3
4
5
6
7
data.agg({'B':'mean','C':'sum'})    #B列均值,C列匯總
Out[14]:
     C         B
A              
301  2.000000
183  5.500000
372  4.333333

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

?
1
2
3
4
5
6
7
df.groupby('A').apply(np.mean)
Out[25]:
          B           C
A                     
2.000000  100.333333
5.500000   91.500000
4.333333  124.000000

5、將某列數據按數據值分成不同范圍段進行分組運算

創建數據集:

?
1
2
3
4
5
6
7
8
9
10
11
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#第一種方法:
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.029.840000       9.880000
(40.0, 65.052.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)進行分組后,需要對另外一列采用不同的聚合方法:

?
1
2
3
4
5
6
7
8
df.groupby('A')['B'].agg({'mean':np.mean, 'std': np.std})
 
Out[16]:
       std      mean
A                  
1.00000  2.000000
2.12132  5.500000
3.21455  4.333333

2、按照某列進行分組后,對不同的列采用不同的聚合方法:

?
1
2
3
4
5
6
7
8
9
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 上:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
df
Out[31]:
   A  B    C
0  2  100
1  7   87
2  1   96
3  3  130
4  3  105
5  2   87
6  4   96
7  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的使用的文章就介紹到這了,更多相關python 分組函數groupby和分組運算函數agg內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/weixin_37536446/article/details/82109431

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品亚洲视频 | 九九九九精品九九九九 | 国产精品久久久久久久久久久久 | 久久久久久久国产精品免费播放 | 国产亚洲欧美一区二区 | 99精品欧美一区二区蜜桃免费 | 久久99久久99 | 欧美精品一区二区三区在线播放 | av毛片 | 久久大陆 | 婷婷激情五月 | 一级毛片免费看 | 久久久免费少妇高潮毛片 | 国产一级片儿 | 精品影院| 国产欧美一区二区精品性色 | 九九porny88av| 国产精品久久久久久久久久东京 | 欧美精品一区二区三区在线播放 | 欧美午夜一区二区三区免费大片 | 美日韩精品视频 | 日韩精品免费视频 | 国产在线91 | 亚洲成人久久久 | 久久久久久久久久久久国产 | 日韩国产一区二区 | 久久噜噜噜精品国产亚洲综合 | 天天色天天草 | 中文字幕 亚洲一区 | 日韩精品在线免费观看 | av网站在线看 | 久久99精品久久久久久久 | 亚洲天堂黄色 | www.欧美.com | 亚洲精品久久久久久久久久久久久 | 久久免费精品视频 | 欧美日韩一区在线观看 | 日日躁夜夜躁狠狠躁 | 欧美高清性xxxxhdvideosex | 国产原创精品视频 | 亚洲精品欧美一区二区三区 |