pandas获取groupby分组里最大值所在的行方法


Posted in Python onApril 20, 2018

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。

以上这篇pandas获取groupby分组里最大值所在的行方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
Dec 08 Python
Python 字符串操作方法大全
Mar 11 Python
python获取从命令行输入数字的方法
Apr 29 Python
Python判断两个对象相等的原理
Dec 12 Python
Python实现带参数与不带参数的多重继承示例
Jan 30 Python
Python多线程原理与用法详解
Aug 20 Python
Python多进程池 multiprocessing Pool用法示例
Sep 07 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
python2.7实现复制大量文件及文件夹资料
Aug 31 Python
python实现图片二值化及灰度处理方式
Dec 07 Python
Python如何在循环内使用list.remove()
Jun 01 Python
如何用Python 加密文件
Sep 10 Python
pandas多级分组实现排序的方法
Apr 20 #Python
Python PyQt4实现QQ抽屉效果
Apr 20 #Python
Python在groupby分组后提取指定位置记录方法
Apr 20 #Python
PyQt实现界面翻转切换效果
Apr 20 #Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
Apr 20 #Python
python3 pandas 读取MySQL数据和插入的实例
Apr 20 #Python
PyQt5每天必学之事件与信号
Apr 20 #Python
You might like
php实现多城市切换特效
2015/08/09 PHP
Yii2.0高级框架数据库增删改查的一些操作
2015/11/16 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
JS检测图片大小的实例
2013/08/21 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
JS实现的系统调色板完整实例
2016/12/21 Javascript
javascript基础知识讲解
2017/01/11 Javascript
微信小程序之页面拦截器的示例代码
2017/09/07 Javascript
Vue Socket.io源码解读
2018/02/07 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
python字典操作实例详解
2017/11/16 Python
python3如何将docx转换成pdf文件
2018/03/23 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
浅谈python之高阶函数和匿名函数
2019/03/21 Python
python全栈知识点总结
2019/07/01 Python
Django框架视图函数设计示例
2019/07/29 Python
Python PyInstaller库基本使用方法分析
2019/12/12 Python
Python序列类型的打包和解包实例
2019/12/21 Python
python函数中将变量名转换成字符串实例
2020/05/11 Python
Python实现京东抢秒杀功能
2021/01/25 Python
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
zooplus波兰:在线宠物店
2019/07/21 全球购物
会计职业生涯规划范文
2014/01/04 职场文书
校园活动宣传方案
2014/03/28 职场文书
技术合作协议书范本
2014/04/18 职场文书
《歌唱二小放牛郎》教学反思
2014/04/19 职场文书
婚前协议书标准版
2014/10/19 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL
mongoDB数据库索引快速入门指南
2022/03/23 MongoDB