Pandas组内排序总结

初始化一个DataFrame,以便后面进行分析

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

name score

A 1

A 3

A 2

B 5

B 9

总体而言有三种思路:

先排序,后分组

先排序,后分组这种方法,基于一个前提,即分组不会改变组内的相对顺序。这种方法,首先采用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


参考资料:

pandas groupby sort within groups

Sort pandas dataframe within groups

zhihu.com/question/4140

编辑于 2017-10-19 18:40

文章被以下专栏收录