Распределение количества по емкости - PullRequest
0 голосов
/ 15 октября 2018

Имеют два кадра данных: машины и требуют следующим образом:

машины

import pandas as pd
import numpy as np
import itertools

dates = pd.Series([d.date() for d in pd.date_range('1/1/2018', periods=4, freq='W')])
sites = pd.Series('TH, ID'.split(','))
product = list('AB')
machine = ['M1', 'M2'] # can have multiple machines per site for a product

machines = pd.DataFrame([e for e in itertools.product(dates, sites, product, machine)], 
                        columns=['Date', 'Site', 'Product', 'Machine'])

machines['Capacity'] = np.random.randint(10, 35, size=len(machines))
machines['Week'] = pd.to_datetime(machines.Date).dt.strftime('%Y-%U')

machines.head()

спрос

s = 'TH, ID, IN'.split(',')
s = s + s[::-1]

demand_days = pd.date_range('1/1/2018', periods=12*7, freq='D')
demand_days

demand = pd.DataFrame([e for e in itertools.product([d.date() for d in demand_days], s, product)],
                     columns=['Date', 'Site', 'Product'])

demand['Qty'] = np.random.randint(1,50, len(demand))
demand['Week'] = pd.to_datetime(demand.Date).dt.strftime('%Y-%U')
demand.head()

объединено групповой для спрос. Количество показывает:

pd.merge(demand, machines[['Week', 'Site', 'Product', 'Machine', 'Capacity']], on=['Week', 'Site', 'Product']).set_index('Week').groupby(['Week', 'Site', 'Product']).Qty.sum()[:5]

объединено групповой для machine.Capacity показывает:

pd.merge(demand, machines[['Week', 'Site', 'Product', 'Machine', 'Capacity']], on=['Week', 'Site', 'Product']).set_index('Week').groupby(['Week', 'Site', 'Product', 'Machine']).Capacity.sum()[:5]

Как объединить машины и запросить и создать единый кадр данных такой, что:

  • , если Qty спроса больше, чемЕмкость первой машины на Сайте, следующая машина заполнена
  • Если машин больше не осталось, последняя машина принимает оставшуюся нагрузку (т.е. перегружена)
  • В запросе могут быть дополнительные строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...