您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 衢州分类信息网,免费分类信息发布

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

2024/11/15 0:01:04发布48次查看
下面为大家分享一篇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
countmtspvalue
03 s1 a 1
12 s1 b 2
25 s2 c 3
310 s2 d 4
410 s2 e 5
56 s3 f 6
方法1:在分组中过滤出count最大的行
df.groupby('mt').apply(lambda t: t[t.count==t.count.max()])
countmtspvalue
mt
s103 s1 a 1
s2310 s2 d 4
410 s2 e 5
s356 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
countmtspvalue
03 s1 a 1
310 s2 d 4
410 s2 e 5
56 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
countmtspvalue
03 s1 a 1
310 s2 d 4
56 s3 f 6
df.iloc[df.groupby(['mt']).apply(lambda x: x['count'].idxmax())]
countmtspvalue
03 s1 a 1
310 s2 d 4
56 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
mtvalue
0s1 1
3s2 4
5s3 6
方法4:先排好序,然后每组取第一个
df.sort('count', ascending=false).groupby('mt', as_index=false).first()
mtcountspvalue
0s1 3 a 1
1s2 10 d 4
2s3 6 f 6
那问题又来了,如果不是要取出最大值所在的行,比如要中间值所在的那行呢?
思路还是类似,可能具体写法上要做一些修改,比如方法1和2要修改max算法,方法3要自己实现一个返回index的方法。 不管怎样,groupby之后,每个分组都是一个dataframe。
相关推荐:
pandas+dataframe实现行列选择与切片操作
python 数据处理库 pandas 入门
以上就是pandas获取groupby分组里最大值所在的行方法的详细内容。
衢州分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录