網站首頁 編程語言 正文
創建一個dataframe結構
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)
分組函數 groupby()
初識分組聚合
我們可以通過DataFrame.groupby(by=[”column“]) 方法對數據進行分組,再根據需求進行 聚合操作。
統計各個班的最高的成績:
# 先按照班級進行分組,再統計各個組里面的成績的最大值! ret = df.groupby(by=['cls'])['score'].max().reset_index() print('ret:\n', ret)
分開來看就是:
ret = df.groupby(by=['cls']) # 將數據以 cls 進行分組,返回 DataFrameGroupBy 對象 print(ret) # <pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002B6B2003A60> ret = ret['score'] # 取出 score 列,返回 SeriesGroupBy 對象 print(ret) # <pandas.core.groupby.generic.SeriesGroupBy object at 0x000002B6B59EAFD0> ret = ret.max() # 取出 score 中的最大值,返回 Series 對象 print(ret) """ cls A 100 B 89 Name: score, dtype: int64 """ ret = ret.reset_index() # 重設索引,返回 DataFrame 對象 print(ret) """ cls score 0 A 100 1 B 89 """
多重行索引分組聚合
統計各個班的各個小組的最高成績
# 先按照班級分組,再按照小組分組,最后統計各個小組內成績的最大值 ret = df.groupby(by=['cls', 'group'])['score'].max() print('ret:\n', ret) print('index:\n', ret.index) # MultiIndex ---多重行索引 ret = ret.reset_index() # 重設索引 print(ret)
對多列數據進行分組聚合
統計各個班級的成績、身高的平均值:
# 按照班級分組,統計各個組內 成績、身高的平均值 ret = df.groupby(by=['cls'])[['score', 'height']].mean().reset_index() print('ret:\n', ret)
綜合應用
統計各個班級、各個小組的成績、身高的平均值
# 先按照班級分組、再按照小組分組---統計各個小組內的成績的平均值、身高的平均值 ret = df.groupby(by=['cls', 'group'])[['score', 'height']].mean().reset_index() print('ret:\n', ret)
聚合函數 agg(aggregate)
在Pandas中,
agg
和aggregate
兩個函數指向同一個方法,使用時寫任意一個即可。
求 多列數據 的 多個指標
統計成績、身高的最大值、均值
# 使用agg 方法 可以對多列數據一次性求出多個指標 ret = df.loc[:, ['score', 'height']].agg([np.max, np.mean]) print('ret:\n', ret)
對多列數據統計不同的指標
統計成績的均值、同時統計身高的最大值
ret = df.agg({'score': [np.mean], 'height': [np.max]}) print('ret:\n',ret)
對多列數據統計不同個數的指標
統計成績的均值、最大值、中位數 和 身高的均值
ret = df.agg({'score': [np.mean, np.max, np.median], 'height': [np.mean]}) print('ret:\n', ret)
使用agg 方法也可以配合著 分組 對不同列、不同的數據、統計不同個數的 不同指標!
ret = df.groupby(by=['cls']).agg({'height': [np.max,np.mean], 'score': [np.min]}) print('ret:\n', ret)
agg調用 自定義函數
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) # 對多列 使用自定義函數 ret = df.loc[:, ['score', 'height']].agg(func_add_one) print('ret3:\n', ret)
使用agg 調用numpy的統計指標
# 統計所有同學成績的和 ret = df.loc[:, 'score'].agg(np.sum) print('ret:\n',ret) print('type:\n',type(ret)) # # 統計所有同學 成績以及身高 的和 ret = df.loc[:, ['score', 'height']].agg(np.sum) print('ret:\n', ret) print('type:\n',type(ret)) # 統計身高 + 成績(無意義的,只是為了演示能夠 同一行相加) ret = df.loc[:, ['score', 'height']].agg(np.sum, axis=1) # 使用axis指定相加的方向 print('ret:\n', ret) print('type:\n',type(ret))
除了以上方法之外,還可以使用自定義方法聚合,可以參見我的這篇文章:Pandas使用自定義方法
總結
原文鏈接:https://blog.csdn.net/weixin_45760274/article/details/123511623
相關推薦
- 2022-09-19 C++四種cast使用詳細介紹_C 語言
- 2022-10-15 python?實現syslog?服務器的詳細過程_python
- 2022-11-29 C#中泛型類和擴展方法如何使用_C#教程
- 2022-06-24 超詳細的Python安裝第三方庫常用方法匯總_python
- 2022-04-26 Android?Jetpack?Compose實現列表吸頂效果_Android
- 2023-05-23 深入了解React中的合成事件_React
- 2022-03-19 CentOS7下安裝MongoDB數據庫過程_MongoDB
- 2022-04-11 C#基于Sockets類實現TCP通訊_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支