網站首頁 編程語言 正文
在前面的章節中,我們討論了Series的計算方法與Pandas的自動對齊功能。不光是Series,DataFrame也是支持運算的,而且還是經常被使用的功能之一。
由于DataFrame的數據結構中包含了多行、多列,所以DataFrame的計算與統計可以是用行數據或者用列數據。為了更方便我們的使用,Pandas為我們提供了常用的計算與統計方法:
操作 | 方法 | 操作 | 方法 |
---|---|---|---|
求和 | sum | 最大值 | max |
求均值 | mean | 最小值 | min |
求方差 | var | 標準差 | std |
中位數 | median | 眾數 | mode |
分位數 | quantile | ? | ? |
一.運算
接上文的例子,我們已經有了N個學生的數學、語文、英語的成績表,現在,我們要算出每個學生的總成績,那么我們就可以用以下的方法:
''' 行的求和以下演示兩種方法: 方法1:先把待求和的列數據刪選出來(剔除掉name列),然后使用sum函數求和 方法2:把待求和的列一個一個選出來然后使用運算符求和 兩種方法最后的結果為像原有的DataFrame中新增一列,數據為每行數據的求和 ''' df['sum'] = df[['chinese', 'math', 'english']].sum(1) #方法1 df['sum'] = df['chinese'] + df['math'] + df['english'] #方法2 Output: name chinese english math sum 0 XiaoMing 99 100 80 279 1 LiHua 102 79 92 273 2 HanMeiNei 111 130 104 345
在sum方法中我們傳入了參數1,代表的是我們使用的軸(axis)為行(對行數據進行求和),如果想要計算出每列的求和我們只用傳入0即可(sum函數默認參數為0,所以也可不傳):
df[['chinese', 'math', 'english']].sum(0) Output: chinese 312 math 276 english 309 dtype: int64
現在有了總成績,那么數學老師或者語文老師就會關心本班學生的數據平均分是多少,同樣的,我們可以非常快速的計算出來:
df['math'].mean() #方法一:直接使用Pandas提供的mean求均值方法 df['math'].sum() / df.shape[0] #方法二:使用求和方法算出總和后除以總人數(行數) Output: 92.0
本??中使用了DataFrame的shape方法,這個方法是用來顯示DataFrame的行數和列數的,行數為0,列數1。需要注意的是輸出的列數值是不含索引列的。
上述??只計算了數學的平均分,感興趣的小伙伴可以自行基礎出英語和語文的平均分哦~
二.統計
這個時候數學老師又有新的需求了,他想查看本班學生數學成績的最高分、最低分、中位數等統計數據,那么根本不慌,Pandas統統可以幫我們搞定:
df['math'].min() # math列的最小值 Output:80 df['math'].max() # math列的最大值 Output:104 df['math'].quantile([0.3, 0.4, 0.5]) # math列的30%、40%、50%分位數 Output: 0.3 87.2 0.4 89.6 0.5 92.0 Name: math, dtype: float64 df['math'].std() # math列的標準差 Output:12 df['math'].var() # math列的方差 Output:144 df['math'].mean() # math列的平均數 Output:92 df['math'].median() # math列的中位數 Output:92 df['math'].mode() # math列的眾數,返回一個Series對象(有可能出現并列的情況,例子中眾數為1,所以都返回) Output: 0 80 1 92 2 104 dtype: int64
我們也可以使用DataFrame的describe方法對DataFrame查看基本的統計情況:
df.describe() Outprint: chinese english math sum count 3.000000 3.000000 3.0 3.000000 mean 104.000000 103.000000 92.0 299.000000 std 6.244998 25.632011 12.0 39.949969 min 99.000000 79.000000 80.0 273.000000 25% 100.500000 89.500000 86.0 276.000000 50% 102.000000 100.000000 92.0 279.000000 75% 106.500000 115.000000 98.0 312.000000 max 111.000000 130.000000 104.0 345.000000
三.排序
一般來講我們的成績表都是按照總分從高到低進行排序:
df = df.sort_values(by='sum', ascending=False) Output: name chinese english math sum 2 HanMeiNei 111 130 104 345 0 XiaoMing 99 100 80 279 1 LiHua 102 79 92 273
可以看到我們使用了sort_values方法對DataFrame進行排序,同時by參數傳入‘sum’指定按照‘sum’字段進行排序,ascending用來設置是降序(False)還是升序(True,默認值)排序。使用sort_values排序后默認會返回一個新的DataFrame對象,也就是說并不會影響原有的DataFrame對象,所以例子中我們才會把排序后的對象賦值給原有的DataFrame對象,如果不想排序后創建新的對象也是可以的,只需要傳入inplace=True即可(在原有的DataFrame基礎上修改):
df.sort_values(by='sum', ascending=False, inplace=True) print(df) Output: name chinese english math sum 2 HanMeiNei 111 130 104 345 0 XiaoMing 99 100 80 279 1 LiHua 102 79 92 273
細心的小伙伴可能會發現當我們進行排序后,如果DataFrame中的行數據有調整的話,其行的索引值是不會更改的,上述例子中因為我們用了默認的遞增數列索引,所以排序后看起來并不是很友好,不過不用擔心,我們還是可以重置索引值的:
df = df.sort_values(by='sum', ascending=False).reset_index() Output: index name chinese english math sum 0 2 HanMeiNei 111 130 104 345 1 0 XiaoMing 99 100 80 279 2 1 LiHua 102 79 92 273
使用reset_index重設索引后我們的DataFrame對象的索引列確實被重置成了遞增的序列,同時也多了列名為index的一列數據。當然我們可以傳入drop=True將原有的索引列不插入到新的DataFrame中:
df = df.sort_values(by='sum', ascending=False).reset_index(drop=True) name chinese english math sum 0 HanMeiNei 111 130 104 345 1 XiaoMing 99 100 80 279 2 LiHua 102 79 92 273
為了更直觀的展示排名情況,我們可以索引值+1這樣就展示出了學生的排名情況:
df.index += 1 name chinese english math sum 1 HanMeiNei 111 130 104 345 2 XiaoMing 99 100 80 279 3 LiHua 102 79 92 273
原文鏈接:https://juejin.cn/post/6933840539666087950
相關推薦
- 2022-04-07 python函數的重新定義及練習_python
- 2022-05-13 ByteTrack的卡爾曼濾波使用什么樣的邊框坐標信息
- 2023-08-01 el-date-picker組件中渲染多余文字
- 2022-09-03 Docker進階之構建自定義鏡像實戰指南_docker
- 2023-02-27 C語言中互斥鎖與自旋鎖及原子操作使用淺析_C 語言
- 2023-03-25 Android?Jetpack組件ViewModel基本用法詳解_Android
- 2022-06-10 nginx.conf配置文件結構小結_nginx
- 2022-09-02 六個Python編程最受用的內置函數使用詳解_python
- 最近更新
-
- 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同步修改后的遠程分支