2016-11-06 37 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