import random
import xlwings as xw
from collections import Counter
wb = xw.Book('Test.xlsx')
sheet = xw.sheets.active
SKUs = sheet.range('A2:C693').value
list_of_prob = sheet.range('D2:D693').value
list_of_prob = [float(i) for i in list_of_prob]
SKUs = random.choices(SKUs, weights = list_of_prob, k=20)
for item in zip(SKUs):
print (item)
我编写了以下程序(上图),该程序根据概率输出20个项目的订单拣配清单:
(['Item91', 10.0, 1.0],)
(['Item482', 6.0, 15.0],)
(['Item533', 8.0, 17.0],)
(['Item63', 7.0, 2.0],)
(['Item50', 5.0, 5.0],)
(['Item14', 2.0, 2.0],)
(['Item145', 1.0, 6.0],)
(['Item225', 6.0, 9.0],)
(['Item23', 3.0, 2.0],)
(['Item33', 4.0, 2.0],)
(['Item47', 5.0, 4.0],)
(['Item88', 9.0, 4.0],)
(['Item8', 1.0, 4.0],)
(['Item1', 1.0, 1.0],)
(['Item13', 2.0, 2.0],)
(['Item21', 3.0, 1.0],)
(['Item86', 9.0, 3.0],)
(['Item205', 5.0, 6.0],)
(['Item1', 1.0, 1.0],)
(['Item67', 7.0, 4.0],)
每个项目都有两个数字,分别对应过道(仓库中)的过道和槽位。现在的目的是过滤所有重复通道被移除的列表,并且只留下相应过道的最远槽。
示例:过道1有四个要挑选的项目。要计算订单拣货员的旅行时间(退货路线政策),我只需要最远物品的位置。那将是过道1中的第6个槽。因此我想过滤所有过道1重复并且只保留([1.0,6.0],)。
因此,对于所有过道,我想要以下列表:
由此:
([10.0, 1.0],)
([6.0, 15.0],)
([8.0, 17.0],)
([7.0, 2.0],)
([5.0, 5.0],)
([2.0, 2.0],)
([1.0, 6.0],)
([6.0, 9.0],)
([3.0, 2.0],)
([4.0, 2.0],)
([5.0, 4.0],)
([9.0, 4.0],)
([1.0, 4.0],)
([1.0, 1.0],)
([2.0, 2.0],)
([3.0, 1.0],)
([9.0, 3.0],)
([5.0, 6.0],)
([1.0, 1.0],)
([7.0, 4.0],)
对此:
([10.0, 1.0],)
([6.0, 15.0],)
([8.0, 17.0],)
([2.0, 2.0],)
([1.0, 6.0],)
([3.0, 2.0],)
([4.0, 2.0],)
([9.0, 4.0],)
([5.0, 6.0],)
([7.0, 4.0],)
我确实设法在excel中找到了解决方案。首先删除所有重复项,然后使用剩余的重复项查找相应值的最大值。是否有一种很好的方法来实现这种"高级"在Python中过滤?
答案 0 :(得分:0)
以上是其他人建议的基于熊猫的解决方案。它使用类似sql的分组。
import pandas as pd
datin = [['Item91', 10.0, 1.0],
['Item482', 6.0, 15.0],
['Item533', 8.0, 17.0],
['Item63', 7.0, 2.0],
['Item50', 5.0, 5.0],
['Item14', 2.0, 2.0],
['Item145', 1.0, 6.0],
['Item225', 6.0, 9.0],
['Item23', 3.0, 2.0],
['Item33', 4.0, 2.0],
['Item47', 5.0, 4.0],
['Item88', 9.0, 4.0],
['Item8', 1.0, 4.0],
['Item1', 1.0, 1.0],
['Item13', 2.0, 2.0],
['Item21', 3.0, 1.0],
['Item86', 9.0, 3.0],
['Item205', 5.0, 6.0],
['Item1', 1.0, 1.0],
['Item67', 7.0, 4.0]]
pd.DataFrame(datin, columns=['Item', 'Aisle', 'Slot']).groupby(by='Aisle', as_index=False)['Slot'].max().values.tolist()