Pandas multiindex数据帧获得每个排序组的前5行

时间:2016-11-06 13:38:46

标签: python sorting pandas dataframe group-by

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

enter image description here

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

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分:0)

要对海报列进行排序,您可以使用sort level

df.sortlevel(1, ascending=False)

要获得前n个结果,您可以使用.head

df.head(5)

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

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

如果这有帮助,请告诉我。很难说这是否能用有限的信息解决您的问题