熊猫识别产生80次销售的商品数量

时间:2019-05-31 00:01:14

标签: pandas

我有一个数据框,其中包含每个国家/地区的产品列表和相关销售额 我需要为每个国家/地区确定最畅销的商品中有#个,其累计销售额占每个国家所有商品总销售额的80%。

例如

Cnt Product, units
Italy apple 500
Italy beer 1500
Italy bread 2000
Italy orange 3000
Italy butter 3000

预期结果

Italy 3

(总数为10.000,排名前三位的产品-黄油,橙子,面包的销售额为8.000,占总数的80%)

2 个答案:

答案 0 :(得分:1)

尝试定义一个函数并应用于groupby:

def get_sale(x, pct=0.8):

    thresh = 0.8 * x.sum()

    # sort values descendingly for top salse
    x=x.sort_values(ascending=False).reset_index(drop=True)

    # store indices of those with cumsum pass threshold
    sale_pass_thresh = x.index[x.cumsum().ge(thresh)]

    return sale_pass_thresh[0] + 1

df.groupby('Cnt').units.apply(get_sale)

输出:

Cnt
Italy    3
Name: units, dtype: int64

答案 1 :(得分:0)

需要在这里玩一些逻辑

df=df.sort_values('units',ascending=False)
g=df.groupby('Cnt').units
s=(g.cumsum()>=g.transform('sum')*0.8).groupby(df.Cnt).sum()
df.groupby('Cnt').size()-s+1
Out[710]: 
Cnt
Italy    3.0
dtype: float64