导出函数的数学方法

2024-05-26 04:24:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据表,里面有很多数据,都分布在几列上。下面提取的数据将显示我面临的问题:

data sheet example

此表表示库存系统中的更改。正的金额变化意味着新的项目被添加到库存中,并且这些项目的价格是已知的。项目价格等于进口采购价格。你知道吗

下单时,相应的金额变化为负数,价格未知。算法应该填入这些未知的价格。你知道吗

库存时间最长的商品应该先卖出,价格和买的一样。一旦这样一批货用完,就应该用下一批货来确定销售价格。你知道吗

例如,在第3行中,售出了3件商品,库存中只剩下9件商品。通过查看数据,我们知道这3种产品的单件价格是49.55美元。但当然,随着项目的增减,情况开始变得更加复杂:

坐最后一排。此时,第一批(49.55)已经全部售出。下一批(48.25)只有2件——不够订购的7件。之后的批次(47.23)足以供应剩下的5个项目。因此,每个项目的价格应该是这两个价格的加权平均数。你知道吗

所以现在,我正在寻找一个函数或算法来确定下订单时应该使用的项目价格。你知道吗


Tags: 数据项目算法产品系统库存时间价格
1条回答
网友
1楼 · 发布于 2024-05-26 04:24:14

下面是一些python代码,它实现了一个FIFO algorithm关于从库存销售商品的方法:

stock = [
    { "before":  0, "change": 10, "price": 49.55 },  
    { "before": 10, "change":  2, "price": 48.25 },  
    { "before": 12, "change": -3, "price": None  },  
    { "before":  9, "change": -3, "price": None  },  
    { "before":  6, "change": -4, "price": None  },  
    { "before":  2, "change":  8, "price": 47.23 },  
    { "before": 10, "change": -7, "price": None  },  
]

queue = []
for line in stock:
    if line["change"] > 0:
        queue.append({ "stock": line["change"], "price": line["price"] })
    else:
        # calculate price from queue
        count = -line["change"]
        totalPrice = 0
        while count > 0:
            take = min(count, queue[0]["stock"])
            totalPrice += take * queue[0]["price"]
            count -= take
            queue[0]["stock"] -= take
            if not queue[0]["stock"]:
                queue.pop(0) # no more items in this "batch": remove it
        # Calculate an average price. Because of rounding, cents may not add up
        line["price"] = round(totalPrice / -line["change"], 2)

# output result
for line in stock:
    print(line)

输出为:

{'before':  0, 'change': 10, 'price': 49.55}
{'before': 10, 'change':  2, 'price': 48.25}
{'before': 12, 'change': -3, 'price': 49.55}
{'before':  9, 'change': -3, 'price': 49.55}
{'before':  6, 'change': -4, 'price': 49.55}
{'before':  2, 'change':  8, 'price': 47.23}
{'before': 10, 'change': -7, 'price': 47.52}

请注意,有些价格(示例中的最后一个)是两个或多个批次价格的加权平均数。在这种情况下,实际平均数可能有更多的小数位数,需要舍入。这将导致金额余额不完全是0后,所有已售出。你知道吗

相关问题 更多 >