将多个箱子中的物品分配给不同数量的订单

Distribute a number of items in bins to a different number of orders

我是 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 个元素已分配给订单 1。Bin 1 还剩 7 个项目。 #如果订单已满,则转到下一个订单
  2. Bin 1 中的 7 个元素已分配给订单 2。Bin 1 还剩 0 件商品。 #移动到下一个箱子
  3. Bin 2 中的 1 个元素已分配给订单 2。Bin 2 还剩 0 件商品。

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

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

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

这是一个解决方案:

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