import pandas as pd
import numpy as np
df = pd.DataFrame({
'A' : [1, 1, 2, 2,1, 2, 2, 2],
'B' : [15,14,15,12,13,14,15,16]})
# apply
df.groupby('A').apply(lambda x: x.describe()).reset_index()
df.groupby('A').apply(lambda x: x.sort_values('B').head(2)) # 组内排序,topn
# agg
df.groupby("A").agg([np.sum, np.mean, np.std]).rename(columns={'sum': 'foo','mean': 'bar','std': 'baz'}) # 一行多聚合函数
df.groupby("A").agg([lambda x: x.max() - x.min()]) # 一行自定义聚合函数
df.groupby("A").agg({'A': np.sum,'B': lambda x: np.std(x, ddof=1)}) # 多行分别一个聚合行数
其他
还有一种求topn的方法
df.sort_values(['class','score'],ascending=[1,0],inplace=True) # 首先对全局排序
grouped = df.groupby(['class']).head(2)