У меня есть следующий набор данных, и я пытаюсь найти способ вычислить столбец Leftover
на основе остальных столбцов.
Лог c Я пытаюсь реализовать logi c прост -
- Если
Order
появится через неделю, мы вычтем любые Inventory
доступные на текущей неделе, - Если
Order
все еще имеет Оставшееся количество для выполнения, мы вычитаем его из Inventory
из предыдущих трех недель - Если
Order
все еще имеет оставшееся количество для выполнения, мы вычитаем его из Inventory
из следующих трех недель - Если
Order
выполнено в 7-недельном окне, все оставшиеся Inventory
присутствуют, мы переносим его в Leftover
столбец
Например:
- Для части AB C на неделе 5 есть заказ на 70. Сначала мы возьмем инвентарь с той же недели,
70 - 10 = 60
- У нас еще осталось 60 заказов, мы потребляем запас доступно на 4-й неделе,
60 - 20 = 40
- У нас еще осталось 40 заказов, мы потребляем запас, доступный на 3-й неделе,
40 - 30 = 10
- У нас еще осталось 10 заказов, мы потребляем запас, доступный на 2-й неделе,
10 - 5 = 5
- У нас еще 5 заказов осталось, но мы не можем использовать инвентарь на 1-й неделе, потому что он находится за пределами 3-недельного окна, поэтому мы go продвигаем еще 3 недели
- Мы go на 6-ю неделю и видим, что доступно 50 единиц в
Inventory
, 50 - 5 = 45
- Теперь, когда мы выполнили заказы на 4-ю неделю, мы go выполняем следующий выполняемый заказ, то есть на 7-й неделе, который имеет 60 заказов.
- Нам нужно выполнить 60 заказов, поэтому мы сначала потребляем запас за текущую неделю,
60 - 5 = 55
- У нас еще есть 55 заказов, поэтому мы потребляем запас за предыдущую неделю, то есть за неделю 6. Теперь запомните, предыдущий заказ уже забрал 5 единиц из инвентаря 6-й недели, поэтому у нас осталось только
45
единиц на эту неделю, поэтому 55 - 45 = 10
- У нас еще осталось 10 заказов, но мы не можем go вернуться больше, как я инвентарь уже использовался предыдущим заказом
- Мы потребляем инвентарь из будущего сейчас, т.е. недели 8,
10 - 30 = -20
- И вот как мы получаем значение Остатка
-20
для Деталь ABC
в неделю 8 - Повторите те же логи c для детали
XYZ
Part Week Inventory Orders Leftover
0 ABC 1 10 0 0
1 ABC 2 5 0 0
2 ABC 3 30 0 0
3 ABC 4 20 0 0
4 ABC 5 10 70 0
5 ABC 6 50 0 0
6 ABC 7 5 60 0
7 ABC 8 30 0 -20
8 XYZ 1 10 0 10
9 XYZ 2 5 0 15
10 XYZ 3 10 0 0
11 XYZ 4 30 0 0
12 XYZ 5 30 90 0
Теперь это может быть достигнуто большим количеством if-else
утверждения, но как это можно сделать намного эффективнее, используя Pandas Векторизация, Рекурсия и меньше строк кода, как я буду использовать этот лог c на 1000+ частей?
import pandas as pd
import numpy as np
data = {
"Part": ["ABC", "ABC", "ABC", "ABC", "ABC", "ABC", "ABC", "ABC", "XYZ", "XYZ", "XYZ", "XYZ", "XYZ"],
"Week": [1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5],
"Inventory": [10, 5, 30, 20, 10, 50, 5, 30, 10, 5, 10, 30, 30],
"Orders": [0, 0, 0, 0, 70, 0, 60, 0, 0, 0, 0, 0, 90],
"Leftover": [10, 0, 0, 0, 0, 0, 0, -20, 10, 15, 0, 0, 0],
}
df = pd.DataFrame(data)
print(df)
Спасибо Я ценю любую помощь в этом.