Мы должны сделать что-то хаки sh в качестве лейкопластыря во время COVID. Мне дали список инвентаря для одного из наших меньших узлов корабля - он состоит приблизительно из 2 тысяч строк двух столбцов; SKU (уникальный идентификатор товара; int) и количество (сколько товаров на складе). Я также вытягиваю (через SQL) все заказы за последние несколько дней. Это более 400 тыс. Строк ORDR_NBR и SKU; ORDR_NBR соответствует 1-4 SKU. Задача, таким образом, состоит в том, чтобы выяснить, сколько «готовых к отправке» заказов узел мог бы выполнить в рабочем состоянии.
Мой нынешний подход использует Pandas; с фреймами данных 'df' (индекс отсортированных данных заказа - номер заказа) и inv_df '(отсортированный данные инвентаря, уникальный индекс - SKU):
output = [ordr_nbr for ordr_nbr in df.index.unique() if
(df[df.index == ordr_nbr].SKU.isin(inv_df.index)).sum() ==
len(df[df.index == ordr_nbr])]
(наряду с некоторыми последующими шагами для вычитания инвентаря подсчитывает и исключает некоторые заказы с помощью распродажи)
Несмотря на то, что задача сложна в вычислительном отношении, время выполнения для указанной выше строки (3+ часа для сопоставления 400k: 2k на корпоративном ноутбуке) кажется чрезмерным. Да, Python является медленным языком, но это все, что у меня есть в данный момент.
ОБРАЗЦЫ ДАННЫХ:
df: {Индекс (порядковый номер): '002348579', SKU : 29483820, ORDR_DT: 2020-03-29 T12: 00}
inv_df: {Index (SKU): 29483820, QTY: 47}
ВЫХОД: (для строки выше)
002348579 '; поскольку в инвентаризационном_диске указан уникальный номер SKU, указанный выше, он может отправить весь заказ.