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中的两个内置模块介绍
Apr 05 Python
Python脚本获取操作系统版本信息
Dec 17 Python
Python实现扩展内置类型的方法分析
Oct 16 Python
Python unittest单元测试框架总结
Sep 08 Python
python爬取酷狗音乐排行榜
Feb 20 Python
Pandas中resample方法详解
Jul 02 Python
python 实现list或string按指定分段
Dec 25 Python
python 实现按对象传值
Dec 26 Python
Python3+selenium实现cookie免密登录的示例代码
Mar 18 Python
解决Python在导入文件时的FileNotFoundError问题
Apr 10 Python
python实现音乐播放和下载小程序功能
Apr 26 Python
python温度转换华氏温度实现代码
Dec 06 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
如何选购合适的收音机
2021/03/01 无线电
php auth_http类库进行身份效验
2009/03/19 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
php float不四舍五入截取浮点型字符串方法总结
2013/10/28 PHP
phalcon框架使用指南
2016/02/23 PHP
PHP精确计算功能示例
2016/11/29 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
<script defer> defer 是什么意思
2009/05/10 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&平移轮播效果
2019/08/16 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
Python中字符编码简介、方法及使用建议
2015/01/08 Python
Python简单实现enum功能的方法
2016/04/25 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
python中 * 的用法详解
2019/07/10 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
pycharm如何使用anaconda中的各种包(操作步骤)
2020/07/31 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
碧欧泉法国官网:Biotherm法国
2019/10/23 全球购物
假日旅行社实习自我鉴定
2013/09/24 职场文书
如何客观的进行自我评价
2013/12/17 职场文书
25岁生日感言
2014/01/13 职场文书
幼儿教师国培感言
2014/02/19 职场文书
艺人经纪人岗位职责
2014/04/15 职场文书
竞选班干部的演讲稿
2014/04/24 职场文书
学校火灾防控方案
2014/06/09 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
python 爬取天气网卫星图片
2021/06/07 Python
SQL Server数据库备份和恢复数据库的全过程
2022/06/14 SQL Server