22、pandas的分组取最大多行并求和函数nlargest()

在pandas库里面,我们常常关心的是最大的前几个,比如销售最好的几个产品,几个店,等。之前讲到的head(), 能够看到看到DF里面的前几行,如果需要看到最大或者最小的几行就需要先进行排序。max()和min()可以看到最大或者最小值,但是只能看到一个值。

源数据

所以我们可以使用nlargest()函数,nlargest()的优点就是能一次看到最大的几行,而且不需要排序。缺点就是只能看到最大的,看不到最小的。

我们来看看单价排在前十的数据:

单价排在前十的数据

nlargest()的第一个参数就是截取的行数。第二个参数就是依据的列名。

这样就可以筛选出单价最高的前十行,而且是按照单价从最高到最低进行排列的,所以还是按照之前的索引。

还可以按照total_price来进行排名:

按照total_price排名

nlargest还有一个参数,keep='first'或者'last'。当出现重复值的时候,keep='first',会选取在原始DataFrame里排在前面的,keep='last'则去排后面的。

由于nlagerst()不能去最小的多个值,如果我们一定要使用这个函数进行选取也是可以的.

先设置一个辅助列:

先设置一个辅助列

然后在进行选取:

以辅助列进行选取

当然了,也可以通过head()加上排序进行选取的。

那以前这些操作都可以通过其它函数来进行替代的话,nlargest()有什么必要介绍吗?或者说学不学这个函数有什么关系吗?

这就是我们今天要重点介绍的,如果说要选择不同location_road下的前五名要怎么操作呢?

很多人可能第一反应会想到先分组然后进行max()操作,但是这样的操作只能选择最大的一列:

使用max()

但是使用max有一个问题,就是选取的是每一列的最大值,而不是选取最大值的那一行,也就是说只能在选取单列的最大值的时候才是准确的。

这个时候我们就要想到apply和lambda的自定义函数了:

选取多个指标的TOP(N)

这样就选出了不同loaction_road的price排在前五的行了。

nlargest()函数在这种场景下使用是非常方便的,而且结果也已经默认排好顺序了。

还有一些场景下需要计算分组的前几名,然后在进行求和的,这个我们也可以使用nlargest进行操作:

分组之后进行求和

使用这种方法会出现报错提示,这个因为在列和索引都存在loaction_road,有重复,系统有警告,在实际使用时可以先改列名再操作。我们也可以换一种方式直接按照索引进行求和,这样就没有警告了:

分组之后进行求和
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,388评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,957评论 19 139
  • 大家好!我来自思涵创业平台我叫创业如歌 所有的商机来临时都是这样: 远听 忽悠人! 了解 留住人! 走进 造就人!...
    创业如歌666简书凤芹阅读 434评论 0 1
  • 脊梁在成长背负,世界的行囊脚步铿锵,黑板是一座碑只能稚嫩的喘息,仰望 铅笔头嘲笑,逃吧回头看看,窗口有母亲的凝望爬...
    刘汉皇阅读 229评论 0 1
  • 粤语方舟 第231期 国:去到很远的地方都找不到一家像样一点的餐厅。 粤:去到冇雷公咁远都搵唔到一间似样啲嘅餐厅。...
    笑小天阅读 704评论 0 0