在numpy與pandas中,快速找出mode(眾數(shù))

一位朋友突然問我說,numpy中,如何找出一維數(shù)組和二維數(shù)組(矩陣)中的mode,我當(dāng)然說我知道怎么找啊,等我回家后再寫一下代碼就知道了。。。,心里在想,numpy和pandas的常用函數(shù)和方法就那些,好像沒有直接找出1個(gè)mode或多個(gè)mode的方法?于是就嘗試著先不去stackoverflow找解法,自己動(dòng)手先寫一個(gè)自定義函數(shù),看是否能實(shí)現(xiàn)這個(gè)功能,思路是這樣的,先從最簡單的數(shù)據(jù)結(jié)構(gòu)開始,將numpy的一維數(shù)組,轉(zhuǎn)成Python list,再使用counter配合循環(huán)計(jì)算頻數(shù),循環(huán)2次后再兩兩比較,然后取出最大值,ok,寫好了,親測有效,請(qǐng)見下圖:

圖片發(fā)自簡書App

可是我這個(gè)方法太笨了,而且也不適用于二維數(shù)組,甚至要使用嵌套的for循環(huán)才能實(shí)現(xiàn)對(duì)二維數(shù)組的操作,太費(fèi)腦子了,身為宇宙第一語言的Python,一定會(huì)有更簡潔的方法,stackoverflow搜下,果然有的,嘿嘿,原來用scipy庫的stats的這個(gè)統(tǒng)計(jì)模塊,就可實(shí)現(xiàn),代碼如下:

圖片發(fā)自簡書App


另外,我原先寫的代碼,也可以優(yōu)化成以下這幾行,使用numpy的bincount()搭配argmax()即可,請(qǐng)見下面優(yōu)化后的代碼(此方法不適用于二維數(shù)組):

圖片發(fā)自簡書App

但事實(shí)上,還有更為方便的方法,能更快找出mode,那就是將一維數(shù)組轉(zhuǎn)成Pandas的Series,將二維數(shù)組轉(zhuǎn)成Pandas的DataFrame,然后調(diào)用Pandas的mode()方法,一切搞定,就幾行代碼而已,比如df.mode(),以下為重構(gòu)后的代碼:

圖片發(fā)自簡書App

圖片發(fā)自簡書App
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容