pandas - 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%)
解决方案
尝试定义一个函数并应用于 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