pandas获取groupby分组里最大值所在的行方法
作者:Tobin's Blog 发布时间:2021-08-14 21:39:14
标签:pandas,行,最大值,groupby
pandas获取groupby分组里最大值所在的行方法
如下面这个DataFrame,按照Mt分组,取出Count最大的那行
import pandas as pd
df = pd.DataFrame({'Sp':['a','b','c','d','e','f'], 'Mt':['s1', 's1', 's2','s2','s2','s3'], 'Value':[1,2,3,4,5,6], 'Count':[3,2,5,10,10,6]})
df
Count | Mt | Sp | Value | |
---|---|---|---|---|
0 | 3 | s1 | a | 1 |
1 | 2 | s1 | b | 2 |
2 | 5 | s2 | c | 3 |
3 | 10 | s2 | d | 4 |
4 | 10 | s2 | e | 5 |
5 | 6 | s3 | f | 6 |
方法1:在分组中过滤出Count最大的行
df.groupby('Mt').apply(lambda t: t[t.Count==t.Count.max()])
Count | Mt | Sp | Value | ||
---|---|---|---|---|---|
Mt | |||||
s1 | 0 | 3 | s1 | a | 1 |
s2 | 3 | 10 | s2 | d | 4 |
4 | 10 | s2 | e | 5 | |
s3 | 5 | 6 | s3 | f | 6 |
方法2:用transform获取原dataframe的index,然后过滤出需要的行
print df.groupby(['Mt'])['Count'].agg(max)
idx=df.groupby(['Mt'])['Count'].transform(max)
print idx
idx1 = idx == df['Count']
print idx1
df[idx1]
Mt
s1 3
s2 10
s3 6
Name: Count, dtype: int64
0 3
1 3
2 10
3 10
4 10
5 6
dtype: int64
0 True
1 False
2 False
3 True
4 True
5 True
dtype: bool
Count | Mt | Sp | Value | |
---|---|---|---|---|
0 | 3 | s1 | a | 1 |
3 | 10 | s2 | d | 4 |
4 | 10 | s2 | e | 5 |
5 | 6 | s3 | f | 6 |
上面的方法都有个问题是3、4行的值都是最大值,这样返回了多行,如果只要返回一行呢?
方法3:idmax(旧版本pandas是argmax)
idx = df.groupby('Mt')['Count'].idxmax()
print idx
df.iloc[idx]
Mt
s1 0
s2 3
s3 5
Name: Count, dtype: int64
Count | Mt | Sp | Value | |
---|---|---|---|---|
0 | 3 | s1 | a | 1 |
3 | 10 | s2 | d | 4 |
5 | 6 | s3 | f | 6 |
df.iloc[df.groupby(['Mt']).apply(lambda x: x['Count'].idxmax())]
Count | Mt | Sp | Value | |
---|---|---|---|---|
0 | 3 | s1 | a | 1 |
3 | 10 | s2 | d | 4 |
5 | 6 | s3 | f | 6 |
def using_apply(df):
return (df.groupby('Mt').apply(lambda subf: subf['Value'][subf['Count'].idxmax()]))
def using_idxmax_loc(df):
idx = df.groupby('Mt')['Count'].idxmax()
return df.loc[idx, ['Mt', 'Value']]
print using_apply(df)
using_idxmax_loc(df)
Mt
s1 1
s2 4
s3 6
dtype: int64
Mt | Value | |
---|---|---|
0 | s1 | 1 |
3 | s2 | 4 |
5 | s3 | 6 |
方法4:先排好序,然后每组取第一个
df.sort('Count', ascending=False).groupby('Mt', as_index=False).first()
Mt | Count | Sp | Value | |
---|---|---|---|---|
0 | s1 | 3 | a | 1 |
1 | s2 | 10 | d | 4 |
2 | s3 | 6 | f | 6 |
那问题又来了,如果不是要取出最大值所在的行,比如要中间值所在的那行呢?
思路还是类似,可能具体写法上要做一些修改,比如方法1和2要修改max算法,方法3要自己实现一个返回index的方法。 不管怎样,groupby之后,每个分组都是一个dataframe。
来源:http://www.guoguoday.com/post/pandas%E8%8E%B7%E5%8F%96groupby%E5%88%86%E7%BB%84%E9%87%8C%E6%9C%80%E5%A4%A7%E5%80%BC%E6%89%80%E5%9C%A8%E7%9A%84%E8%A1%8C/
0
投稿
猜你喜欢
- 如何制作一个分页程序?确实,翻页程序可以相互借鉴,但具体到每一需求,还是有较大差别的。代码入下,供参考:<%language=&quo
- 一个不错的二级联动下拉菜单源码,您一定会用得到的。运行代码:<html><head><title>Lis
- 本文实例讲述了Python使用matplotlib和pandas实现的画图操作。分享给大家供大家参考,具体如下:画图在工作再所难免,尤其在做
- 1.官网下载Pycharm community版如pycharm-community-2017.3.1.tar.gz。2. #解压tar.g
- PHP的isset()函数 一般用来检测变量是否设置 格式:bool isset ( mixed var [, mixed var [, .
- 需求背景:进行分值计算。如下图,如果只是一两个还好说,写写判断,但是如果有几十个,几百个,会不会惨不忍睹。而且,下面的还是三种情况。例如:解
- 编程中有时候需要一个初始极大值(或极小值)作为temp,当然可以自定义设置为10000(whatever),不过python中有一个值可以代
- 什么是浮动?浮动是 css 的定位属性。我们可以看一下印刷设计来了解它的起源和作用。印刷布局中,文本可以按照需要围绕图片。一般把这种方式称为
- 最近要搭建一个阿里云的LMAP环境,选了CentOS7来做搭建。1.ApacheCentos7默认已经安装httpd服务,只是没有启动。如果
- 年前在重写淘宝旺铺里的会员卡脚本的时候,无意中发现了一个有趣的事情。代码类似:var associative_array = new Arr
- 事务日志文件Transaction Log File是用来记录数据库更新情况的文件,扩展名为ldf。在 SQL Server 7.0 和 S
- 一、爬取数据话不多说了,直接上代码( copy即可用 )import requestsimport pandas as pdclass Sp
- 以前写过《 10条影响CSS渲染速度的写法与建议》,今天放些数据出来,供参考;首先说明一点,CSS对网页的最后渲染出来的速度影响非
- 1.打开 database/migrations/2014_10_12_000000_create_users_table.php 这个 m
- 今天看了微软JScript官方blog上去年的两篇文章: http://blogs.msdn.com/jscript/archive/200
- 本文分享的实例主要实现的是Python+matplotlib绘制一个有阴影和没有阴影的3D条形图,具体如下。首先看看演示效果:完整代码如下:
- 负责为网页编程语言提供标准化服务的W3C组织(World Wide Web Consortium)近日开始修改超文本标记语言的定义,计划为该
- ajax缓存和编码问题不难解决,下面是解决方法。编码问题默认使用UTF-8,如果一旦发现对象找不到的情况,可能js中输入了中文,同时js的编
- 如何用拦截表单的方法上传图片? 看下列代码:<script language="
- 本文实例讲述了PHP常用函数之获取汉字首字母功能。分享给大家供大家参考,具体如下://获取汉字的首字母function getFirstCh