大熊猫分组排名前X%

时间:2019-06-28 13:14:58

标签: python pandas

我在不同的组中有一些机器及其销售,例如机器时代。我的目标是将每个组中销售量最高的5%的计算机隔离开来。

我设法使用以下代码在整个数据帧上做到了这一点

df['quantile'] = pd.qcut(df.Sales, 20, labels=range(20))
top = df[df['quantile']==0]

但是在使用groupby时,我似乎无法做到相同。本质上,该分配不起作用。有任何线索吗?

1 个答案:

答案 0 :(得分:2)

您可以执行groupby.transformquantile

df = pd.DataFrame({'a': np.random.randint(1,4,1000),
                   'Sales': np.random.uniform(0,1,1000)})
df['quantile'] = df.groupby('a').Sales.transform('quantile', 0.95)

#filter:
top = df[df.Sales.gt(df['quantile'])]