我想捕获发生率高于某个阈值的某些类别值:
df:
ticket_id, category, amount --> some more columns
1020 cat1 1000
1022 cat1 55
1023 cat1 12291
1120 cat2 140
1121 cat3 1250
^
|
|
Way more rows with mostly (1020) cat5, (98) cat1, cat3, cat4 and no cat2.
>>>> df.groupby('category')['amount'].count()
category
cat1 100
cat2 1
cat3 6
cat4 2
cat5 1020
我想在一个列表中得到计数大于20的类别。目前我在做:
^{pr2}$现在这是可行的,但我相信它可以做得更短:为了引用count column
,我需要至少2个聚合函数,更进一步,我需要1个变量和2行代码。
我希望是这样的:
>>>> groupby('category')['amount'].apply(lambda x: x.count() > 10)
但结果是:
cat1 100 True
etc
>>>> groupby('category')['amount'].apply(lambda x: x[x.count() > 10])
Fails completely
>>>> groupby('category')['amount'].count().nlargest(2)
gives the correct list but in this case because I know there are 2 elements.
什么是最优雅/最具执行力的解决方案?在
您只需使用初始groupby的结果并对其进行索引,就可以使其更清晰:
设置
^{pr2}$groupby
与count
整洁的索引:
您可以在布尔索引中使用lambda express:
借用@user2483203设置:
使用
^{pr2}$value_counts
和布尔索引:输出:
相关问题 更多 >
编程相关推荐