簡體   English   中英

熊貓多索引數據框獲得每個已排序組的前5行

[英]Pandas multiindex dataframe get top 5 row of each sorted group

我有一個多索引DataFrame,如下所示:

在此處輸入圖片說明

我想對每個海報組進行排序(降序)並獲得前5名。 如果海報數量少於5個,則刪除記錄。

假設您具有以下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
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])

在此處輸入圖片說明

要對發布者列進行排序,可以使用排序級別

df.sortlevel(1, ascending=False)

要獲得前n個結果,可以使用.head

df.head(5)

要刪除記錄,您可以參考相應的級別:

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

讓我知道是否有幫助。 很難說這能否在有限的信息下解決您的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM