首页 > 解决方案 > Pandas 识别出产生 80 次销售额的商品数量

问题描述

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

例如

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

预期成绩

Italy 3

(总单位为 10.000,前 3 种产品 - 黄油、橙子、面包的销售额为 8.000,占总数的 80%)

标签: pandas

解决方案


尝试定义一个函数并应用于 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

推荐阅读