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

use*_*773 2 python group-by dataframe pandas 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
Run Code Online (Sandbox Code Playgroud)

等等 100k 记录。

我正在尝试返回按集群分组的收入客户的前 2%。我知道这行不通,但我认为它给出了我正在尝试做的事情的总体思路:

df.groupby('cluster').len(df['cluster'])/100 <= .2
Run Code Online (Sandbox Code Playgroud)

试图按收入、按集群取回前 2% 客户的数据框。

cs9*_*s95 5

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
Run Code Online (Sandbox Code Playgroud)