Pandas组内排序总结

import pandas as pd

df = pd.DataFrame([['A',1],['A',3],['A',2],['B',5],['B',9]], columns = ['name','score'])

总体而言有三种思路:

先排序,后分组

先排序,后分组这种方法,基于一个前提,即分组不会改变组内的相对顺序。这种方法,首先采用sort_values的方法,对整个df进行排序,然后对相对字段进行group操作,并采用head方法获取每一个group中的前3行记录

df.sort_values('score', ascending = False, inplace=True)
res = df.groupby('name').head(3)

先分组,后排序

先分组,后排序,是通常一般人想到的思维逻辑。而对于Pandas而言,分组后的排序,可以采用apply函数来完成,且传入一个匿员函数,此时里面的x,应该对应分组后的一个dataframe

df.groupby('name').apply(lambda x: x.sort_values('score', ascending=False))

多列排序实现

相当于直接先对name列排序,再对score列排序,这样也变相实现了分组排序的功能

df.sort_values(['name','score'], ascending = [True,False], inplace=True)

取每个分组第一

df.groupby('name').apply(lambda x: x.sort_values('score', ascending=False).head(1))
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值