pandas——分組聚合2,groupby(by=),agg(),

數據分析

使用pd讀取,再使用np處理,np.min(數據,axis=)
其中min,max,median;最小,最大,中位數;aixs=0表示每列運算

import pandas as pd
import numpy as np 

df=pd.read_csv('my_csv.csv',header=0,\
	encoding='gbk',dtype={'年齡':float})
sele_att=["年齡","身高"]
print('求最小值----')
print(np.min(df[sele_att],axis=0))
print('求最大值----')
print(np.max(df[sele_att],axis=0))
print('求最中位值----')
print(np.median(df[sele_att],axis=0))
'''
求最小值----
年齡      4.0
身高    160.0
dtype: float64
求最大值----
年齡     35.0
身高    180.0
dtype: float64
求最中位值----
[ 13. 175.]
'''

使用pandas自身函數處理,使用: df[列名列表].min(axis=)
axis的作用同np中相同,最大值max(),中位數median(),累加值cumsum(),總和sum(),分位數quantile(),describe()無參時,是對列數值型數據的描述,當describe(include=[“object”])時,統計所有對象

import pandas as pd
import numpy as np 

df=pd.read_csv('my_csv.csv',header=0,\
	encoding='gbk',dtype={'年齡':float})
sele_att=["年齡","身高"]
print('求最小值----')
print(df[sele_att].min(axis=0))
print('求最大值----')
print(df[sele_att].max(axis=0))
print('求最中位值----')
print(df[sele_att].median(axis=0))
print('求每列累加值----')
print(df[sele_att].cumsum(axis=0))
print('求每列加和值----')
print(df[sele_att].sum(axis=0))
print('求每列分位數值----')
print(df[sele_att].quantile([0,0.2,0.5,1.0],axis=0))
print('對數值列的計算描述----')
print(df[sele_att].describe())
print('對所有列的對象描述----')
print(df.describe(include=['object']))
'''
求最小值----
年齡      4.0
身高    160.0
dtype: float64
求最大值----
年齡     35.0
身高    180.0
dtype: float64
求最中位值----
年齡     13.0
身高    175.0
dtype: float64
求每列累加值----
     年齡      身高
0  20.0   180.0
1  55.0   350.0
2  78.0   510.0
3  83.0   685.0
4  89.0   865.0
5  93.0  1040.0
求每列加和值----
年齡      93.0
身高    1040.0
dtype: float64
求每列分位數值----
       年齡     身高
0.0   4.0  160.0
0.2   5.0  170.0
0.5  13.0  175.0
1.0  35.0  180.0
對數值列的計算描述----
              年齡          身高
count   6.000000    6.000000
mean   15.500000  173.333333
std    12.565827    7.527727
min     4.000000  160.000000
25%     5.250000  171.250000
50%    13.000000  175.000000
75%    22.250000  178.750000
max    35.000000  180.000000
對所有列的對象描述----
        姓名 性別  地址
count    6  6   6
unique   6  2   6
top     小紅  男  芬蘭
freq     1  4   1
'''

分類彙總

首先,使用my_group=pd.groupby(by=依據的屬性名列表)返回一個組對象,再對組對象處理my_group.mean() 等函數處理

import pandas as pd
import numpy as np 

df=pd.read_csv('my_csv.csv',header=0,\
	encoding='gbk',dtype={'年齡':float})
groupde=df.groupby(by='身高')
print(groupde.mean())
print('--分割=='*3)
print(groupde.max())
print('--計數分割=='*3)
print(groupde.count())
print('--數據量分割=='*4)
print(groupde.size())
'''
       年齡
身高       
160  23.0
170  35.0
175   4.5
180  13.0
--分割==--分割==--分割==--分割==
     姓名    年齡 性別   地址
身高                   
160  黑蛋  23.0  女   日本
170  狗子  35.0  男  加拿大
175  小紅   5.0  男   韓國
180  王貴  20.0  男   美國
--分割==--分割==--分割==--分割==
     姓名  年齡  性別  地址
身高                 
160   1   1   1   1
170   1   1   1   1
175   2   2   2   2
180   2   2   2   2
--分割==--分割==--分割==--分割==
身高
160    1
170    1
175    2
180    2
dtype: int64
'''

聚合函數agg(),針對相同索引的統計mean,sum,max等以及自己定義的函數

給每一列的屬性同樣的統計運算

建立好分組後(groupby())的變量設爲grouped,使用**groupe.agg([np.mean,np.sum])**將組的數據可進行mean、sum等運算,數據列下會出現新的agg()的列屬性。如下圖所示,因爲求平均與和只能用於數值型數據,除了數字的年齡(成爲索引),另外就是
在這裏插入圖片描述

df=pd.read_csv('my_csv.csv',header=0,encoding='gbk',dtype={'年齡':float})
print(df)
'''
   姓名    年齡 性別   地址   身高
0  王貴  20.0  男   美國  180
1  狗子  35.0  男  加拿大  170
2  黑蛋  23.0  女   日本  160
3  小五   5.0  男   韓國  175
4  李四   4.0  男   朝鮮  180
5  小紅   4.0  女   芬蘭  175
'''
# names 表示多個列的屬性名稱
names=["姓名","年齡","身高","地址"]
# df[names]產生一個以“年齡”作爲索引的包含names中幾個屬性列
grouped= df[names].groupby('年齡')
#索引不變,求出幾個屬性列的平均值與和
print(grouped.agg([np.mean,np.sum]))
'''
         身高     
       mean  sum
年齡              
4.0   177.5  355
5.0   175.0  175
20.0  180.0  180
23.0  160.0  160
35.0  170.0  170
'''
#對篩選後的數據進行loc,這個loc是對列的分層
print(grouped.agg([np.mean,np.sum]).loc[[4,5],('身高',['mean','sum'])])
'''
         身高     
       mean  sum
年齡              
4.0   177.5  355
5.0   175.0  175
'''

給每一列的屬性不同的統計運算(字典)

在agg()中使用字典作爲參數可以對不同列進行最小、最大、平均的不同的計算,下面就對年齡的最大、最小,對體重的最大,身高的平均
在這裏插入圖片描述

import pandas as pd
import numpy as np 

df=pd.read_csv('my_csv.csv',header=0,\
	encoding='gbk',dtype={'年齡':float})
print(df)
names=["id","姓名","年齡","身高","體重"]
grouped= df[names].groupby('id')

print(grouped.agg({'年齡':(np.max,np.min),'體重':np.max,\
	  '身高':np.mean}))

自己定義的函數

自己定義函數doub_out(),作用:將一組數據累加後再乘以2
在這裏插入圖片描述

import pandas as pd
import numpy as np 

def doub_out(data): #自己建立的運算函數
	return(data.sum()*2)

df=pd.read_csv('my_csv.csv',header=0,\
	encoding='gbk',dtype={'年齡':float})
print(df)
names=["id","姓名","年齡","身高","體重"]
grouped= df[names].groupby('id')
print(grouped.agg({'年齡':(np.max,doub_out),'體重':np.max,  '身高':np.mean}))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章