import pandas as pd
df = pd.DataFrame(
data={'name': ['z_s', 'l_s', 'w_w', 'z_l', 'y_s', 'j_j', 'l_b', 'z_f', 'hs_q', 'lbl_k', 'qy_n', 'mg_n'],
'score': [100, 97, 98, 89, 67, 59, 29, 87, 78, 89, 88, 80],
'group': [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2],
'cls': ['A', 'A', 'A', 'B', 'B', 'B', 'A', 'A', 'A', 'B', 'B', 'B'],
'height': [178.0, 180.0, 176.0, 182.0, 189.0, 190.0, 172.5, 175.0, 165.0, 160.0, 158.5, 159.0]
},
index=['stu_' + str(i) for i in np.arange(1, 13, 1)]
)
print('df:\n', df)
分組函數(shù) groupby()
初識(shí)分組聚合我們可以通過DataFrame.groupby(by=[”column“]) 方法對(duì)數(shù)據(jù)進(jìn)行分組,再根據(jù)需求進(jìn)行 聚合操作。
統(tǒng)計(jì)各個(gè)班的最高的成績(jī):
# 先按照班級(jí)進(jìn)行分組,再統(tǒng)計(jì)各個(gè)組里面的成績(jī)的大值!
ret = df.groupby(by=['cls'])['score'].max().reset_index()
print('ret:\n', ret)
分開來看就是:
ret = df.groupby(by=['cls']) # 將數(shù)據(jù)以 cls 進(jìn)行分組,返回 DataFrameGroupBy 對(duì)象
print(ret) #ret = ret['score'] # 取出 score 列,返回 SeriesGroupBy 對(duì)象
print(ret) #ret = ret.max() # 取出 score 中的大值,返回 Series 對(duì)象
print(ret)
"""
cls
A 100
B 89
Name: score, dtype: int64
"""
ret = ret.reset_index() # 重設(shè)索引,返回 DataFrame 對(duì)象
print(ret)
"""
cls score
0 A 100
1 B 89
"""
多重行索引分組聚合統(tǒng)計(jì)各個(gè)班的各個(gè)小組的最高成績(jī)
# 先按照班級(jí)分組,再按照小組分組,最后統(tǒng)計(jì)各個(gè)小組內(nèi)成績(jī)的大值
ret = df.groupby(by=['cls', 'group'])['score'].max()
print('ret:\n', ret)
print('index:\n', ret.index) # MultiIndex ---多重行索引
ret = ret.reset_index() # 重設(shè)索引
print(ret)
對(duì)多列數(shù)據(jù)進(jìn)行分組聚合統(tǒng)計(jì)各個(gè)班級(jí)的成績(jī)、身高的平均值:
# 按照班級(jí)分組,統(tǒng)計(jì)各個(gè)組內(nèi) 成績(jī)、身高的平均值
ret = df.groupby(by=['cls'])[['score', 'height']].mean().reset_index()
print('ret:\n', ret)
綜合應(yīng)用統(tǒng)計(jì)各個(gè)班級(jí)、各個(gè)小組的成績(jī)、身高的平均值
# 先按照班級(jí)分組、再按照小組分組---統(tǒng)計(jì)各個(gè)小組內(nèi)的成績(jī)的平均值、身高的平均值
ret = df.groupby(by=['cls', 'group'])[['score', 'height']].mean().reset_index()
print('ret:\n', ret)
聚合函數(shù) agg(aggregate)求 多列數(shù)據(jù) 的 多個(gè)指標(biāo)在Pandas中,
agg
和aggregate
兩個(gè)函數(shù)指向同一個(gè)方法,使用時(shí)寫任意一個(gè)即可。
統(tǒng)計(jì)成績(jī)、身高的大值、均值
# 使用agg 方法 可以對(duì)多列數(shù)據(jù)一次性求出多個(gè)指標(biāo)
ret = df.loc[:, ['score', 'height']].agg([np.max, np.mean])
print('ret:\n', ret)
對(duì)多列數(shù)據(jù)統(tǒng)計(jì)不同的指標(biāo)統(tǒng)計(jì)成績(jī)的均值、同時(shí)統(tǒng)計(jì)身高的大值
ret = df.agg({'score': [np.mean], 'height': [np.max]})
print('ret:\n',ret)
對(duì)多列數(shù)據(jù)統(tǒng)計(jì)不同個(gè)數(shù)的指標(biāo)統(tǒng)計(jì)成績(jī)的均值、大值、中位數(shù) 和 身高的均值
ret = df.agg({'score': [np.mean, np.max, np.median], 'height': [np.mean]})
print('ret:\n', ret)
使用agg 方法也可以配合著 分組 對(duì)不同列、不同的數(shù)據(jù)、統(tǒng)計(jì)不同個(gè)數(shù)的 不同指標(biāo)!
ret = df.groupby(by=['cls']).agg({'height': [np.max,np.mean], 'score': [np.min]})
print('ret:\n', ret)
agg調(diào)用 自定義函數(shù)ret = df.loc[:, 'score'].agg(lambda x: x + 1)
print('ret1:\n', ret)
def func_add_one(x):
return x + 1
ret = df.loc[:, 'score'].agg(func_add_one)
print('ret2:\n', ret)
# 對(duì)多列 使用自定義函數(shù)
ret = df.loc[:, ['score', 'height']].agg(func_add_one)
print('ret3:\n', ret)
使用agg 調(diào)用numpy的統(tǒng)計(jì)指標(biāo)# 統(tǒng)計(jì)所有同學(xué)成績(jī)的和
ret = df.loc[:, 'score'].agg(np.sum)
print('ret:\n',ret)
print('type:\n',type(ret))
# # 統(tǒng)計(jì)所有同學(xué) 成績(jī)以及身高 的和
ret = df.loc[:, ['score', 'height']].agg(np.sum)
print('ret:\n', ret)
print('type:\n',type(ret))
# 統(tǒng)計(jì)身高 + 成績(jī)(無意義的,只是為了演示能夠 同一行相加)
ret = df.loc[:, ['score', 'height']].agg(np.sum, axis=1) # 使用axis指定相加的方向
print('ret:\n', ret)
print('type:\n',type(ret))
除了以上方法之外,還可以使用自定義方法聚合,可以參見我的這篇文章:Pandas使用自定義方法
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
新聞標(biāo)題:【Pandas分組聚合】groupby()、agg()方法的使用-創(chuàng)新互聯(lián)
URL鏈接:http://aaarwkj.com/article34/iecpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、域名注冊(cè)、小程序開發(fā)、網(wǎng)站制作、App開發(fā)、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容