2016-11-06 44 views
1

我有一个多指标数据帧像以下:大熊猫多指标数据框获得前5排各分类组

enter image description here

我想每个海报组(降序)进行排序,并获得前五名。如果海报的数量小于5,则删除记录。

+2

首先,请在您的问题中包含您的数据框架样本tead发布链接。然后,发布你迄今为止已经尝试解决的问题。 –

回答

0

排序的海报栏,您可以使用sort level

df.sortlevel(1, ascending=False) 

要获得最高的n个结果,你可以使用.head

df.head(5) 

要删除的记录,你可以参考相应的级别:

df = df[df.index.levels[1] > 5] 

让我知道这是否有帮助。很难说这是否会在有限的信息

4

回答你的问题,假设您有以下DF:

In [97]: df 
Out[97]: 
       Time 
waller poster 
1  11   2 
     22   3 
     33   1 
     44   1 
     55   1 
2  33   1 
3  11   1 
     22   1 
     33   1 
     44   2 
     55   1 
     66   3 

解决方案:

In [98]: (df.sort_index(ascending=[1,0]) 
    ...: .groupby(level=0, as_index=False) 
    ...: .apply(lambda x: x.head(5) if len(x) >= 5 else x.head(0)) 
    ...: .reset_index(level=0, drop=True) 
    ...:) 
    ...: 
Out[98]: 
       Time 
waller poster 
1  55   1 
     44   1 
     33   1 
     22   3 
     11   2 
3  66   3 
     55   1 
     44   2 
     33   1 
     22   1 
1
g = df.groupby(level=0) 

def lrgst(df): 
    if len(df) >= 5: 
     return df.nlargest(5, 'Time') 

pd.concat([lrgst(d) for _, d in g]) 

enter image description here