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