dataframe 众数的方法,在numpy与pandas中,快速找出mode(众数)

一位朋友突然问我说,numpy中,如何找出一维数组和二维数组(矩阵)中的mode,我当然说我知道怎么找啊,等我回家后再写一下代码就知道了。。。,心里在想,numpy和pandas的常用函数和方法就那些,好像没有直接找出1个mode或多个mode的方法?于是就尝试着先不去stackoverflow找解法,自己动手先写一个自定义函数,看是否能实现这个功能,思路是这样的,先从最简单的数据结构开始,将numpy的一维数组,转成Python list,再使用counter配合循环计算频数,循环2次后再两两比较,然后取出最大值,ok,写好了,亲测有效,请见下图:

98aa0afdcd7d

图片发自简书App

可是我这个方法太笨了,而且也不适用于二维数组,甚至要使用嵌套的for循环才能实现对二维数组的操作,太费脑子了,身为宇宙第一语言的Python,一定会有更简洁的方法,stackoverflow搜下,果然有的,嘿嘿,原来用scipy库的stats的这个统计模块,就可实现,代码如下:

98aa0afdcd7d

图片发自简书App

另外,我原先写的代码,也可以优化成以下这几行,使用numpy的bincount()搭配argmax()即可,请见下面优化后的代码(此方法不适用于二维数组):

98aa0afdcd7d

图片发自简书App

但事实上,还有更为方便的方法,能更快找出mode,那就是将一维数组转成Pandas的Series,将二维数组转成Pandas的DataFrame,然后调用Pandas的mode()方法,一切搞定,就几行代码而已,比如df.mode(),以下为重构后的代码:

98aa0afdcd7d

图片发自简书App

98aa0afdcd7d

图片发自简书App

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值