Pandas實(shí)現(xiàn)DataFrame的簡(jiǎn)單運(yùn)算、統(tǒng)計(jì)與排序
在前面的章節(jié)中,我們討論了Series的計(jì)算方法與Pandas的自動(dòng)對(duì)齊功能。不光是Series,DataFrame也是支持運(yùn)算的,而且還是經(jīng)常被使用的功能之一。
由于DataFrame的數(shù)據(jù)結(jié)構(gòu)中包含了多行、多列,所以DataFrame的計(jì)算與統(tǒng)計(jì)可以是用行數(shù)據(jù)或者用列數(shù)據(jù)。為了更方便我們的使用,Pandas為我們提供了常用的計(jì)算與統(tǒng)計(jì)方法:
操作 | 方法 | 操作 | 方法 |
---|---|---|---|
求和 | sum | 最大值 | max |
求均值 | mean | 最小值 | min |
求方差 | var | 標(biāo)準(zhǔn)差 | std |
中位數(shù) | median | 眾數(shù) | mode |
分位數(shù) | quantile |
一.運(yùn)算
接上文的例子,我們已經(jīng)有了N個(gè)學(xué)生的數(shù)學(xué)、語(yǔ)文、英語(yǔ)的成績(jī)表,現(xiàn)在,我們要算出每個(gè)學(xué)生的總成績(jī),那么我們就可以用以下的方法:
''' 行的求和以下演示兩種方法: 方法1:先把待求和的列數(shù)據(jù)刪選出來(lái)(剔除掉name列),然后使用sum函數(shù)求和 方法2:把待求和的列一個(gè)一個(gè)選出來(lái)然后使用運(yùn)算符求和 兩種方法最后的結(jié)果為像原有的DataFrame中新增一列,數(shù)據(jù)為每行數(shù)據(jù)的求和 ''' 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方法中我們傳入了參數(shù)1,代表的是我們使用的軸(axis)為行(對(duì)行數(shù)據(jù)進(jìn)行求和),如果想要計(jì)算出每列的求和我們只用傳入0即可(sum函數(shù)默認(rèn)參數(shù)為0,所以也可不傳):
df[['chinese', 'math', 'english']].sum(0) Output: chinese 312 math 276 english 309 dtype: int64
現(xiàn)在有了總成績(jī),那么數(shù)學(xué)老師或者語(yǔ)文老師就會(huì)關(guān)心本班學(xué)生的數(shù)據(jù)平均分是多少,同樣的,我們可以非常快速的計(jì)算出來(lái):
df['math'].mean() #方法一:直接使用Pandas提供的mean求均值方法 df['math'].sum() / df.shape[0] #方法二:使用求和方法算出總和后除以總?cè)藬?shù)(行數(shù)) Output: 92.0
本??中使用了DataFrame的shape方法,這個(gè)方法是用來(lái)顯示DataFrame的行數(shù)和列數(shù)的,行數(shù)為0,列數(shù)1。需要注意的是輸出的列數(shù)值是不含索引列的。
上述??只計(jì)算了數(shù)學(xué)的平均分,感興趣的小伙伴可以自行基礎(chǔ)出英語(yǔ)和語(yǔ)文的平均分哦~
二.統(tǒng)計(jì)
這個(gè)時(shí)候數(shù)學(xué)老師又有新的需求了,他想查看本班學(xué)生數(shù)學(xué)成績(jī)的最高分、最低分、中位數(shù)等統(tǒng)計(jì)數(shù)據(jù),那么根本不慌,Pandas統(tǒng)統(tǒng)可以幫我們搞定:
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%分位數(shù) Output: 0.3 87.2 0.4 89.6 0.5 92.0 Name: math, dtype: float64 df['math'].std() # math列的標(biāo)準(zhǔn)差 Output:12 df['math'].var() # math列的方差 Output:144 df['math'].mean() # math列的平均數(shù) Output:92 df['math'].median() # math列的中位數(shù) Output:92 df['math'].mode() # math列的眾數(shù),返回一個(gè)Series對(duì)象(有可能出現(xiàn)并列的情況,例子中眾數(shù)為1,所以都返回) Output: 0 80 1 92 2 104 dtype: int64
我們也可以使用DataFrame的describe方法對(duì)DataFrame查看基本的統(tǒng)計(jì)情況:
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
三.排序
一般來(lái)講我們的成績(jī)表都是按照總分從高到低進(jìn)行排序:
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方法對(duì)DataFrame進(jìn)行排序,同時(shí)by參數(shù)傳入‘sum’指定按照‘sum’字段進(jìn)行排序,ascending用來(lái)設(shè)置是降序(False)還是升序(True,默認(rèn)值)排序。使用sort_values排序后默認(rèn)會(huì)返回一個(gè)新的DataFrame對(duì)象,也就是說(shuō)并不會(huì)影響原有的DataFrame對(duì)象,所以例子中我們才會(huì)把排序后的對(duì)象賦值給原有的DataFrame對(duì)象,如果不想排序后創(chuàng)建新的對(duì)象也是可以的,只需要傳入inplace=True即可(在原有的DataFrame基礎(chǔ)上修改):
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
細(xì)心的小伙伴可能會(huì)發(fā)現(xiàn)當(dāng)我們進(jìn)行排序后,如果DataFrame中的行數(shù)據(jù)有調(diào)整的話(huà),其行的索引值是不會(huì)更改的,上述例子中因?yàn)槲覀冇昧四J(rèn)的遞增數(shù)列索引,所以排序后看起來(lái)并不是很友好,不過(guò)不用擔(dān)心,我們還是可以重置索引值的:
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重設(shè)索引后我們的DataFrame對(duì)象的索引列確實(shí)被重置成了遞增的序列,同時(shí)也多了列名為index的一列數(shù)據(jù)。當(dāng)然我們可以傳入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這樣就展示出了學(xué)生的排名情況:
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
到此這篇關(guān)于Pandas實(shí)現(xiàn)DataFrame的簡(jiǎn)單運(yùn)算、統(tǒng)計(jì)與排序的文章就介紹到這了,更多相關(guān)Pandas DataFrame運(yùn)算統(tǒng)計(jì)與排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解從Django Rest Framework響應(yīng)中刪除空字段
這篇文章主要介紹了詳解從Django Rest Framework響應(yīng)中刪除空字段,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01利用python 更新ssh 遠(yuǎn)程代碼 操作遠(yuǎn)程服務(wù)器的實(shí)現(xiàn)代碼
這篇文章主要介紹了利用python 更新ssh 遠(yuǎn)程代碼 操作遠(yuǎn)程服務(wù)器的實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-02-02使用Python3 編寫(xiě)簡(jiǎn)單信用卡管理程序
這篇文章主要介紹了使用Python3 編寫(xiě)簡(jiǎn)單信用卡管理程序的代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2016-12-12python的input,print,eval函數(shù)概述
這篇文章主要為大家概述了python的input,print,eval函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01新年快樂(lè)! python實(shí)現(xiàn)絢爛的煙花綻放效果
這篇文章主要為大家詳細(xì)介紹了python利用可視化技巧實(shí)現(xiàn)煙花綻放效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01Python 實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)中的的棧隊(duì)列
這篇文章主要介紹了Python 實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)中的的棧,隊(duì)列,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05Python設(shè)置在shell腳本中自動(dòng)補(bǔ)全功能的方法
今天小編就為大家分享一篇Python設(shè)置在shell腳本中自動(dòng)補(bǔ)全功能的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Python爬蟲(chóng)獲取國(guó)外大橋排行榜數(shù)據(jù)清單
這篇文章主要介紹了Python爬蟲(chóng)獲取國(guó)外大橋排行榜數(shù)據(jù)清單,文章通過(guò)PyQuery?解析框架展開(kāi)全文詳細(xì)內(nèi)容,需要的小伙伴可以參考一下2022-05-05python中快速進(jìn)行多個(gè)字符替換的方法小結(jié)
最近在用python給自己的seo工作提高效率和節(jié)省時(shí)間,發(fā)現(xiàn)python真的很不錯(cuò),可以完成很多事情。多個(gè)字符替換是大家可能都會(huì)遇到的一個(gè)問(wèn)題,昨天在工作中就碰到了這么一個(gè)問(wèn)題,所以想著記錄一下解決方案及其過(guò)程,方便以后參考。下面來(lái)一起看看吧。2016-12-12python?flappy?bird小游戲分步實(shí)現(xiàn)流程
哈嘍,哈嘍~今天小編又來(lái)分享小游戲了——flappy?bird(飛揚(yáng)的小鳥(niǎo)),這個(gè)游戲非常的經(jīng)典,游戲中玩家必須控制一只小鳥(niǎo),跨越由各種不同長(zhǎng)度水管所組成的障礙2022-02-02