我有一个数据帧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%的客户的数据框。
答案 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