分组并在Pandas DataFrame中找到每个组的前10%记录

时间:2019-02-20 11:40:04

标签: python pandas pandas-groupby

我正在尝试创建一个新的DataFrame,其中包含每组计数记录的前10%。

初始df的示例如下;

date        name       count
2014-12-14  Jerry      1
2014-12-21  Jerry      2
2015-01-11  Jerry      3
2015-02-01  Jerry      4
2015-02-08  Jerry      5
2015-03-01  Jerry      6
2015-03-08  Jerry      7
2015-03-15  Jerry      8
2015-03-22  Jerry      9
2015-04-26  Jerry      10
2014-12-14  Tom        1
2014-12-21  Tom        2
2015-01-11  Tom        3
2015-02-01  Tom        4
2015-02-08  Tom        5
2015-03-01  Tom        6
2015-03-08  Tom        7
2015-03-15  Tom        8
2015-03-22  Tom        9
2015-04-26  Tom        10

上面的DataFrame只是完整DataFrame的摘要,其中包含许多名称,并在一年中每个名称包含每周count信息。

我想要的输出如下。

date        name       count
2015-04-26  Jerry      10
2015-04-26  Tom        10

我将不胜感激。

1 个答案:

答案 0 :(得分:2)

首先sort_values,然后groupby,具有自定义lambda函数,以按每组行的数量获取10%

df1 = (df.sort_values(['name','count'], ascending=[True, False])
         .groupby('name', group_keys=False)
         .apply(lambda x: x.head(int(len(x) / 10))))
print (df1)
          date   name  count
9   2015-04-26  Jerry     10
19  2015-04-26    Tom     10