Подстановка дат доставки по заказам

У меня есть таблица orders

Номер заказа Пункт отгрузки КССС мат осталось произвести, тн
1 Пермь 207465 10
2 Пермь 4435 7
3 Волгоград 19192 25

и таблица graphic

Пункт отгрузки Код КССС Дата_производства Объем_фасовки
Пермь 207465 2022-06-11 8.0
Пермь 207465 2022-06-13 12.0
Волгоград 19192 2022-06-12 30.0
Пермь 4435 2022-06-14 4.0
Тюмень 3033626 2022-06-13 60.0

Мне нужно получить колонку в таблице orders, где будет написана дата производства, которую он будет брать из таблицы graphic. Если в таблице orders колонка "осталось произвести" меньше или равно чем "объем фасовки", то минусовать из таблицы graphic это значение "осталось произвести", а если больше, то "объем фасовки" должен быть нулевым или может быть удалено.

Алгоритм, который я написала, не учитывает того, что в таблице graphic может быть две разные даты на один и тот же продукт и пункт отгрузки. Если на первую дату не хватает объема, она должна смотреть на следующую, если имеется, и прибавлять остаток к ней

def data_shipment(city, code, required_to_make):
    if graphic[(graphic['Пункт отгрузки']==city) & (graphic['Код КССС']==code)].empty:
        return '-'
    elif required_to_make == 0:
        return '-'
    elif required_to_make>0:
        if graphic.loc[(graphic['Пункт отгрузки']==city) & (graphic['Код КССС']==code), 'Объем_фасовки, т'].iloc[0] >= required_to_make:
            graphic.loc[(graphic['Пункт отгрузки']==city) & (graphic['Код КССС']==code), 'Объем_фасовки, т'] -= required_to_make
            data = graphic[(graphic['Пункт отгрузки']==city) & (graphic['Код КССС']==code)]['Дата_производства'].dt.date.iloc[0]
            return data
        else:
            graphic.loc[(graphic['Пункт отгрузки']==city) & (graphic['Код КССС']==code), 'Объем_фасовки, т'].iloc[0] = 0
            
            data = graphic[(graphic['Пункт отгрузки']==city) & (graphic['Код КССС']==code)]['Дата_производства'].dt.date.iloc[0]
            return data
        
orders['дата производства'] = orders.apply(lambda x: data_shipment(x['Пункт отгрузки'], x['КССС мат'], x['осталось произвести, тн']), axis=1)

Итоговая таблица, которую я хочу видеть

Номер заказа Пункт отгрузки КССС мат осталось произвести, тн Дата производства Сколько возможно произвести на эту дату
1 Пермь 207465 10 2022-06-13 10
2 Пермь 4435 7 2022-06-14 4
3 Волгоград 19192 20 2022-06-12 20

Ответы (0 шт):