熊猫分组总金额的前n%

时间:2018-08-13 15:55:22

标签: python-3.x pandas pandas-groupby percentile

我在一家公司工作,试图计算巫婆产品在不同年份的总收入中所占的比例最高,达到80%。

这是我的数据的简短示例:

Part_no Revision    Gross_Revenue   Year
1            a          1           2014
2            a          2           2014
3            c          2           2014
4            c          2           2014
5            d          2           2014

我一直在寻找各种答案,这是我能想到的最好的代码,但是它没有用:

df1 = df[['Year', 'Part_No', 'Revision', 'Gross_Revenue']]
df1 = df1.groupby(['Year', 'Part_No','Revision']).agg({'Gross_Revenue':'sum'})
# print(df1.head())
a = 0.8
df2 = (df1.sort_values('Gross_Revenue', ascending = False)
                .groupby(['Year', 'Part_No', 'Revision'], group_keys = False)
                .apply(lambda x: x.head(int(len(x) * a )))
                .reset_index(drop = True))
print(df2)

我正在努力使每年都能为公司带来80%收入的所有顶级产品返回代码。

我怀疑这是旧的80/20规则。

感谢您的帮助, 我

1 个答案:

答案 0 :(得分:0)

您可以使用cumsum

df[df.groupby('Year').Gross_Revenue.cumsum().div(df.groupby('Year').Gross_Revenue.transform('sum'),axis=0)<0.8]
Out[589]: 
   Part_no Revision  Gross_Revenue  Year
1        2        a              2  2014
2        3        c              2  2014
3        4        c              2  2014