我正在尝试创建一个新的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
我将不胜感激。
答案 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