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实现比较两个列表(list)范围
Jun 12 Python
python如何获取服务器硬件信息
May 11 Python
python实现聊天小程序
Mar 13 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
python+selenium打印当前页面的titl和url方法
Jun 22 Python
python+opencv实现阈值分割
Dec 26 Python
对python tkinter窗口弹出置顶的方法详解
Jun 14 Python
Pytorch提取模型特征向量保存至csv的例子
Jan 03 Python
Python接口测试文件上传实例解析
May 22 Python
Django如何批量创建Model
Sep 01 Python
python破解同事的压缩包密码
Oct 14 Python
python数据可视化使用pyfinance分析证券收益示例详解
Nov 20 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快速统计某个数据库中每张表的数据量
2012/09/04 PHP
教你如何使用php session
2013/10/28 PHP
PHP加密扩展库Mcrypt安装和实例
2013/11/10 PHP
php获取发送给用户的header信息的方法
2015/03/16 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
javascript 写类方式之八
2009/07/05 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
JQuery魔力之$("tagName")与selector
2012/03/05 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
Node.js异步I/O学习笔记
2014/11/04 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
js实现的万能flv网页播放器代码
2016/04/30 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
原生js实现随机点名功能
2019/11/05 Javascript
Python端口扫描简单程序
2016/11/10 Python
Python将图片转换为字符画的方法
2020/06/16 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
pandas 层次化索引的实现方法
2019/07/06 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
零件设计自荐信范文
2013/11/27 职场文书
白血病募捐倡议书
2014/05/14 职场文书
社区植树节活动总结
2015/02/06 职场文书
离开雷锋的日子观后感
2015/06/09 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技