【问题标题】:Distribute a number of items in bins to a different number of orders将箱中的一些物品分配给不同数量的订单
【发布时间】:2020-10-10 16:04:49
【问题描述】:

我是 Python 编程的新手,我有一个小问题要解决。我正在尝试将几个箱子中的一些物品分配给一组订单。

import pandas as pd

a={'Bin 1': 12,
   'Bin 2': 1}

b={'Order 1': 5,
   'Order 2': 8}

bins = pd.DataFrame(a.items(), columns=['Bin', 'Items'])
orders =pd.DataFrame(b.items(), columns=['Order', 'Items'])

分布应如下所示:

我想生成一个新的数据集或指令列表来描述哪些元素从哪个 bin 被分配到哪个顺序:

  1. 从 Bin 1 开始,5 个元素已分配给 Order 1。Bin 1 还剩下 7 个项目。 #如果订单已满,则转到下一个订单
  2. 从箱 1 开始,7 个元素已分配给订单 2。箱 1 还剩下 0 件商品。 #移动到下一个垃圾箱
  3. 从 Bin 2 开始,1 个元素已分配给 Order 2。Bin 2 还剩下 0 件物品。

实际上,我希望最终得到这样的数据框: result

如果在填写最后一个订单后有剩余物品或最后一个订单未完全履行,这不是问题。重要的是指令列表应该适用于任意 n 个箱子或订单。

提前感谢您提供有关如何解决此问题的任何建议或想法。

【问题讨论】:

  • 你能举一个你想要的输出的例子吗?
  • 您好,显示输出的一种方法是采用具有 3 列 Order、Ammount 和 Filled from 的新数据框的形式。类似于:
  • 类似:ibb.co/sjcbyYJ

标签: python pandas assign


【解决方案1】:

这里有一个解决方案:

bins={'Bin 1': 12,
   'Bin 2': 1}

orders={'Order 1': 5,
   'Order 2': 8}

while len(orders) and len(bins): 
    order_name = list(orders.keys())[0]
    bin_name = list(bins.keys())[0]
    m = min(bins[bin_name], orders[order_name])
    print(order_name, bin_name, m)
    bins[bin_name] -= m
    orders[order_name] -= m
    if orders[order_name] == 0: 
        del orders[order_name]
    if bins[bin_name] == 0:
        del bins[bin_name]

这种情况的输出是:

Order 1 Bin 1 5
Order 2 Bin 1 7
Order 2 Bin 2 1

【讨论】:

    猜你喜欢
    • 2011-12-22
    • 2015-09-02
    • 2020-03-17
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 2011-09-21
    • 2022-07-08
    • 1970-01-01
    相关资源
    最近更新 更多