如何通过分组返回前N%的Pandas DataFrame?

时间:2019-06-21 21:00:10

标签: python pandas dataframe group-by pandas-groupby

我有一个数据帧df,如下所示:

Customer   Revenue  Products  Cluster
Jon         100         5        A
Janet       225         12       C
Jim         75          2        B
Stacy       95          4        A
John        125         5        B
Bob         325         20       C
Megan       75          2        A
Stacy       95          4        A

以此类推获得10万条记录。

我试图返回按集群分组的收入客户中收入最高的2%。 我知道这是行不通的,但我认为它可以大致了解我要执行的操作:

df.groupby('cluster').len(df['cluster'])/100 <= .2

尝试按收入(按集群)获取前2%的客户的数据框。

1 个答案:

答案 0 :(得分:4)

IIUC,看来您可以使用GroupBy.quantile,然后对结果进行过滤:

# "Cluster" is the grouper, and
# "Revenue" is the column to calculate the quantile on. 
df[df['Revenue'] >= df.groupby('Cluster')['Revenue'].transform('quantile', 0.98)]

  Customer  Revenue  Products Cluster
0      Jon      100         5       A
4     John      125         5       B
5      Bob      325        20       C