Python 销售额的前80%
我的目标是只筛选销售业绩最好的80%的产品 我总共有100种产品,销售总额为15000,为了了解产品销售的百分比,我正在做这项工作Python 销售额的前80%,python,Python,我的目标是只筛选销售业绩最好的80%的产品 我总共有100种产品,销售总额为15000,为了了解产品销售的百分比,我正在做这项工作 product_dict = {} for product in products: percent_from_sale = product.quantity / total_quantity * 100 product_dict[product] = percent_from_sale 因此,在此之后,我对关键产品和价值进行了预测,价值是该产品销
product_dict = {}
for product in products:
percent_from_sale = product.quantity / total_quantity * 100
product_dict[product] = percent_from_sale
因此,在此之后,我对关键产品和价值进行了预测,价值是该产品销售的百分比,但我如何才能只筛选前80%的产品
您可以将产品目录{product:sales}转换为销售目录[销售,产品]
按销售额从高到低的顺序对sales_列表进行排序
sales_list.sort(reverse=True, key=lambda x:x[0])
然后迭代计算累积和,直到小于80
您可以将产品目录{product:sales}转换为销售目录[销售,产品]
按销售额从高到低的顺序对sales_列表进行排序
sales_list.sort(reverse=True, key=lambda x:x[0])
然后迭代计算累积和,直到小于80
您可以定义在累计总和达到某个限制之前将产生哪些元素:
定义iter_直到RC、限制、键:
累计总和=0
对于src中的元素:
屈服要素
累计总和+=关键元素
如果累计总和>=限制:
打破
让我们生成类似于以下内容的输入:
从集合导入namedtuple
从随机导入洗牌
产品=名称双产品,名称数量
总数量=15000
products=[productfproduct{i},总数量//2**i代表范围1中的i,101]
洗牌产品
现在您可以在生成器函数上迭代。您可以创建前80%销售额的列表:
已分拣产品=已分拣产品,密钥=λx:x.数量,反向=真
top_80_%=未分类产品列表,总数量*0.8,λx:x.数量
您可以在代码形式问题中创建dict您正在尝试执行的操作:
您可以定义在累计总和达到某个限制之前将产生哪些元素:
定义iter_直到RC、限制、键:
累计总和=0
对于src中的元素:
屈服要素
累计总和+=关键元素
如果累计总和>=限制:
打破
让我们生成类似于以下内容的输入:
从集合导入namedtuple
从随机导入洗牌
产品=名称双产品,名称数量
总数量=15000
products=[productfproduct{i},总数量//2**i代表范围1中的i,101]
洗牌产品
现在您可以在生成器函数上迭代。您可以创建前80%销售额的列表:
已分拣产品=已分拣产品,密钥=λx:x.数量,反向=真
top_80_%=未分类产品列表,总数量*0.8,λx:x.数量
您可以在代码形式问题中创建dict您正在尝试执行的操作:
与@lllrnr101的答案类似,但排序略有不同 Use可以使用operator.itemgetter函数获取已排序元组乘积的列表,百分比由第二个参数percent确定。 然后迭代这些对,直到达到累计销售额的80%
import operator
product_dict = {
product: percent
for product in products
}
sorted_items = sorted(
product_dict.items(),
key=operator.itemgetter(1),
reverse=True,
)
cumulative = 0
top_80_sales = {}
for product, percent in sorted_items:
if cumulative < 0.8:
top_80_sales[product] = percent
cumulative += percent
else:
break
与@lllrnr101的答案类似,但排序略有不同 Use可以使用operator.itemgetter函数获取已排序元组乘积的列表,百分比由第二个参数percent确定。 然后迭代这些对,直到达到累计销售额的80%
import operator
product_dict = {
product: percent
for product in products
}
sorted_items = sorted(
product_dict.items(),
key=operator.itemgetter(1),
reverse=True,
)
cumulative = 0
top_80_sales = {}
for product, percent in sorted_items:
if cumulative < 0.8:
top_80_sales[product] = percent
cumulative += percent
else:
break
如果您可以使用pandas或numpy,您可以大幅降低所需的LOC并提高性能,尤其是对于大量产品 从熊猫开始,首先导入熊猫,并用从Olvin Roght获取的数据样本数据创建一个数据帧:
from collections import namedtuple
from random import shuffle
import pandas as pd
# create sample data
product = namedtuple("product", "name quantity")
total_quantity = 15000
products = [product(f"product{i}", total_quantity // (2 ** i)) for i in range(1, 101)]
shuffle(products)
# make into dataframe
prods = pd.DataFrame(products)
现在,按数量对数据帧进行排序:
prods_sort = prods.sort_values(by='quantity', ascending=False)
并获得前80%的产品:
top_products = prods_sort[
~prods_sort.loc[:, 'quantity'].cumsum().ge(
prods_sort.loc[:, 'quantity'].sum() * .8
).shift(1, fill_value=False)
print(top_products)
# Out:
name quantity
40 product1 7500
94 product2 3750
65 product3 1875
我在这里做的是:
获取数量的累积和
检查累计总和是否大于/等于。ge。。。超过总和的80%,则生成布尔数组
将其移位1。shift1,fill_value=False也包括第一个值,该值大于/等于总和的80%,并用False填充,否则第一个值将用np.nan填充
使用此布尔数组对已排序的产品进行索引,以获得占总数量80%的产品
如果您可以使用pandas或numpy,您可以大幅降低所需的LOC并提高性能,尤其是对于大量产品 从熊猫开始,首先导入熊猫,并用从Olvin Roght获取的数据样本数据创建一个数据帧:
from collections import namedtuple
from random import shuffle
import pandas as pd
# create sample data
product = namedtuple("product", "name quantity")
total_quantity = 15000
products = [product(f"product{i}", total_quantity // (2 ** i)) for i in range(1, 101)]
shuffle(products)
# make into dataframe
prods = pd.DataFrame(products)
现在,按数量对数据帧进行排序:
prods_sort = prods.sort_values(by='quantity', ascending=False)
并获得前80%的产品:
top_products = prods_sort[
~prods_sort.loc[:, 'quantity'].cumsum().ge(
prods_sort.loc[:, 'quantity'].sum() * .8
).shift(1, fill_value=False)
print(top_products)
# Out:
name quantity
40 product1 7500
94 product2 3750
65 product3 1875
我在这里做的是:
获取数量的累积和
检查累计总和是否大于/等于。ge。。。超过总和的80%,则生成布尔数组
将其移位1。shift1,fill_value=False也包括第一个值,该值大于/等于总和的80%,并用False填充,否则第一个值将用np.nan填充
使用此布尔数组对已排序的产品进行索引,以获得占总数量80%的产品
前80%的产品,或者那些占销售额80%的产品?@schwobasegg是的,你是对的,我问的问题怎么可能是对的=@AlexanderLek
ontsev在他问meIs numpy或pandas允许后我编辑了我的问题?两者都可以减少所需的LOC并大幅提高性能。前80%的产品,或占销售额80%的产品?@schwobaseggl是的,你是对的,我问问题怎么可能是对的=@AlexanderLekontsev我在他问meIs numpy或pandas后编辑了我的问题?两者都可以减少所需的LOC并大幅提高性能。