понимание списков кортежей из dict и списков - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь понять, как создать список комбинаций кортежей дата: судно из следующих данных:

  • Список судов
  • Список дат прибытия судов
  • Список дат в графике планирования

(судно, дата) должно содержать все возможные комбинации судно: дата в горизонте дат ОТ даты прибытия судна (судно не может уйти до прибытия).

Желаемый результат: Пример

horizon dates = ['2020-01-01', '2020-01-02', '2020-01-03']
vessels = ['A']
vessel_arrival_date = {'A':'2020-01-02'}

Дата прибытия судна A - 2020-01-02, поэтому набор возможных дат отправления:

departure_date_tuple = [('A', '2020-01-02'), ('A', '2020-01-03')]

Я пробовал два метода в рамках понимания, используя pandas фрейм данных для извлечения дат

departure_dates = [(vessel, date) for vessel in vessels for date in sorted(dates_ser.loc[vessel_notice_of_readiness_date[vessel]:, 'dates'])] 

, однако это дает каждую комбинацию судно / дата и не учитывает тот факт, что судно не может выйти до прибытия.

Данные ниже:

dates = ['2020-05-28',
 '2020-05-29',
 '2020-05-30',
 '2020-05-31',
 '2020-06-01',
 '2020-06-02',
 '2020-06-03',
 '2020-06-04',
 '2020-06-05',
 '2020-06-06',
 '2020-06-07',
 '2020-06-08',
 '2020-06-09',
 '2020-06-10',
 '2020-06-11']

vessels = ['AM OCEAN SILVER',
 'APJ ANGAD 2',
 'AQUATONKA',
 'ARUN',
 'BAY OF NAPLES',
 'BOMER OYSTER',
 'BULK JAPAN',
 'CCSC YASA JING',
 'CEYLON BREEZE',
 'CHANG HANG HAO HAI',
 'FURIOUS',
 'HAIFA ROSHANA',
 'HARALAMBOS',
 'IKAN PULAS',
 'KANG XIN HAI',
 'MAMBO',
 'MOORING LINE',
 'PACIFIC MAJOR',
 'PELICAN',
 'PETER OLDENDORFF',
 'ROBUSTO',
 'Rahi',
 'SHTP',
 'CCSC ROBERTS BANK',
 'SUNRISE',
 'TIN CITY',
 'XIN FA HAI',
 'YASA UNITY']

vessel_arrival_date = {'CEYLON BREEZE': '2020-05-29',
 'PETER OLDENDORFF': '2020-05-29',
 'BULK JAPAN': '2020-05-29',
 'XIN FA HAI': '2020-05-29',
 'PACIFIC MAJOR': '2020-06-01',
 'CCSC YASA JING': '2020-06-01',
 'CHANG HANG HAO HAI': '2020-06-01',
 'ROBUSTO': '2020-06-01',
 'AQUATONKA': '2020-06-02',
 'ARUN': '2020-06-02',
 'HARALAMBOS': '2020-06-02',
 'MAMBO': '2020-06-02',
 'SHTP': '2020-06-05',
 'FURIOUS': '2020-06-05',
 'YASA UNITY': '2020-06-05',
 'AM OCEAN SILVER': '2020-06-05',
 'PELICAN': '2020-06-06',
 'BAY OF NAPLES': '2020-06-06',
 'TIN CITY': '2020-06-06',
 'MOORING LINE': '2020-06-06',
 'KANG XIN HAI': '2020-06-09',
 'Rahi': '2020-06-09',
 'APJ ANGAD 2': '2020-06-09',
 'SM ROBERTS BANK': '2020-06-09',
 'HAIFA ROSHANA': '2020-06-10',
 'IKAN PULAS': '2020-06-10',
 'SUNRISE': '2020-06-10',
 'BOMER OYSTER': '2020-06-10'}

1 Ответ

0 голосов
/ 17 июня 2020

Давайте попробуем это:

df1 = pd.MultiIndex.from_product([dates,vessels], names=['dates','vessels']).to_frame(index=False)
df2 = pd.DataFrame.from_dict(vessel_arrival_date, orient='index').rename(columns={0:'ArrivalDate'})
list_of_Depart = df1.merge(df2, left_on='vessels', right_index=True)\
                    .query('ArrivalDate <= dates')\
                    .set_index(['vessels','dates']).index.tolist()

Вывод:

[('AM OCEAN SILVER', '2020-06-05'),
 ('AM OCEAN SILVER', '2020-06-06'),
 ('AM OCEAN SILVER', '2020-06-07'),
 ('AM OCEAN SILVER', '2020-06-08'),
 ('AM OCEAN SILVER', '2020-06-09'),
 ('AM OCEAN SILVER', '2020-06-10'),
 ('AM OCEAN SILVER', '2020-06-11'),
 ('APJ ANGAD 2', '2020-06-09'),
 ('APJ ANGAD 2', '2020-06-10'),
 ('APJ ANGAD 2', '2020-06-11'),
 ('AQUATONKA', '2020-06-02'),
 ('AQUATONKA', '2020-06-03'),
 ('AQUATONKA', '2020-06-04'),
 ('AQUATONKA', '2020-06-05'),
 ('AQUATONKA', '2020-06-06'),
 ('AQUATONKA', '2020-06-07'),
 ('AQUATONKA', '2020-06-08'),
 ('AQUATONKA', '2020-06-09'),
 ('AQUATONKA', '2020-06-10'),
 ('AQUATONKA', '2020-06-11'),
 ('ARUN', '2020-06-02'),
 ('ARUN', '2020-06-03'),
 ('ARUN', '2020-06-04'),
 ('ARUN', '2020-06-05'),
 ('ARUN', '2020-06-06'),
 ('ARUN', '2020-06-07'),
 ('ARUN', '2020-06-08'),
 ('ARUN', '2020-06-09'),
 ('ARUN', '2020-06-10'),
 ('ARUN', '2020-06-11'),
 ('BAY OF NAPLES', '2020-06-06'),
 ('BAY OF NAPLES', '2020-06-07'),
 ('BAY OF NAPLES', '2020-06-08'),
 ('BAY OF NAPLES', '2020-06-09'),
 ('BAY OF NAPLES', '2020-06-10'),
 ('BAY OF NAPLES', '2020-06-11'),
 ('BOMER OYSTER', '2020-06-10'),
 ('BOMER OYSTER', '2020-06-11'),
 ('BULK JAPAN', '2020-05-29'),
 ('BULK JAPAN', '2020-05-30'),
 ('BULK JAPAN', '2020-05-31'),
 ('BULK JAPAN', '2020-06-01'),
 ('BULK JAPAN', '2020-06-02'),
 ('BULK JAPAN', '2020-06-03'),
 ('BULK JAPAN', '2020-06-04'),
 ('BULK JAPAN', '2020-06-05'),
 ('BULK JAPAN', '2020-06-06'),
 ('BULK JAPAN', '2020-06-07'),
 ('BULK JAPAN', '2020-06-08'),
 ('BULK JAPAN', '2020-06-09'),
 ('BULK JAPAN', '2020-06-10'),
 ('BULK JAPAN', '2020-06-11'),
 ('CCSC YASA JING', '2020-06-01'),
 ('CCSC YASA JING', '2020-06-02'),
 ('CCSC YASA JING', '2020-06-03'),
 ('CCSC YASA JING', '2020-06-04'),
 ('CCSC YASA JING', '2020-06-05'),
 ('CCSC YASA JING', '2020-06-06'),
 ('CCSC YASA JING', '2020-06-07'),
 ('CCSC YASA JING', '2020-06-08'),
 ('CCSC YASA JING', '2020-06-09'),
 ('CCSC YASA JING', '2020-06-10'),
 ('CCSC YASA JING', '2020-06-11'),
 ('CEYLON BREEZE', '2020-05-29'),
 ('CEYLON BREEZE', '2020-05-30'),
 ('CEYLON BREEZE', '2020-05-31'),
 ('CEYLON BREEZE', '2020-06-01'),
 ('CEYLON BREEZE', '2020-06-02'),
 ('CEYLON BREEZE', '2020-06-03'),
 ('CEYLON BREEZE', '2020-06-04'),
 ('CEYLON BREEZE', '2020-06-05'),
 ('CEYLON BREEZE', '2020-06-06'),
 ('CEYLON BREEZE', '2020-06-07'),
 ('CEYLON BREEZE', '2020-06-08'),
 ('CEYLON BREEZE', '2020-06-09'),
 ('CEYLON BREEZE', '2020-06-10'),
 ('CEYLON BREEZE', '2020-06-11'),
 ('CHANG HANG HAO HAI', '2020-06-01'),
 ('CHANG HANG HAO HAI', '2020-06-02'),
 ('CHANG HANG HAO HAI', '2020-06-03'),
 ('CHANG HANG HAO HAI', '2020-06-04'),
 ('CHANG HANG HAO HAI', '2020-06-05'),
 ('CHANG HANG HAO HAI', '2020-06-06'),
 ('CHANG HANG HAO HAI', '2020-06-07'),
 ('CHANG HANG HAO HAI', '2020-06-08'),
 ('CHANG HANG HAO HAI', '2020-06-09'),
 ('CHANG HANG HAO HAI', '2020-06-10'),
 ('CHANG HANG HAO HAI', '2020-06-11'),
 ('FURIOUS', '2020-06-05'),
 ('FURIOUS', '2020-06-06'),
 ('FURIOUS', '2020-06-07'),
 ('FURIOUS', '2020-06-08'),
 ('FURIOUS', '2020-06-09'),
 ('FURIOUS', '2020-06-10'),
 ('FURIOUS', '2020-06-11'),
 ('HAIFA ROSHANA', '2020-06-10'),
 ('HAIFA ROSHANA', '2020-06-11'),
 ('HARALAMBOS', '2020-06-02'),
 ('HARALAMBOS', '2020-06-03'),
 ('HARALAMBOS', '2020-06-04'),
 ('HARALAMBOS', '2020-06-05'),
 ('HARALAMBOS', '2020-06-06'),
 ('HARALAMBOS', '2020-06-07'),
 ('HARALAMBOS', '2020-06-08'),
 ('HARALAMBOS', '2020-06-09'),
 ('HARALAMBOS', '2020-06-10'),
 ('HARALAMBOS', '2020-06-11'),
 ('IKAN PULAS', '2020-06-10'),
 ('IKAN PULAS', '2020-06-11'),
 ('KANG XIN HAI', '2020-06-09'),
 ('KANG XIN HAI', '2020-06-10'),
 ('KANG XIN HAI', '2020-06-11'),
 ('MAMBO', '2020-06-02'),
 ('MAMBO', '2020-06-03'),
 ('MAMBO', '2020-06-04'),
 ('MAMBO', '2020-06-05'),
 ('MAMBO', '2020-06-06'),
 ('MAMBO', '2020-06-07'),
 ('MAMBO', '2020-06-08'),
 ('MAMBO', '2020-06-09'),
 ('MAMBO', '2020-06-10'),
 ('MAMBO', '2020-06-11'),
 ('MOORING LINE', '2020-06-06'),
 ('MOORING LINE', '2020-06-07'),
 ('MOORING LINE', '2020-06-08'),
 ('MOORING LINE', '2020-06-09'),
 ('MOORING LINE', '2020-06-10'),
 ('MOORING LINE', '2020-06-11'),
 ('PACIFIC MAJOR', '2020-06-01'),
 ('PACIFIC MAJOR', '2020-06-02'),
 ('PACIFIC MAJOR', '2020-06-03'),
 ('PACIFIC MAJOR', '2020-06-04'),
 ('PACIFIC MAJOR', '2020-06-05'),
 ('PACIFIC MAJOR', '2020-06-06'),
 ('PACIFIC MAJOR', '2020-06-07'),
 ('PACIFIC MAJOR', '2020-06-08'),
 ('PACIFIC MAJOR', '2020-06-09'),
 ('PACIFIC MAJOR', '2020-06-10'),
 ('PACIFIC MAJOR', '2020-06-11'),
 ('PELICAN', '2020-06-06'),
 ('PELICAN', '2020-06-07'),
 ('PELICAN', '2020-06-08'),
 ('PELICAN', '2020-06-09'),
 ('PELICAN', '2020-06-10'),
 ('PELICAN', '2020-06-11'),
 ('PETER OLDENDORFF', '2020-05-29'),
 ('PETER OLDENDORFF', '2020-05-30'),
 ('PETER OLDENDORFF', '2020-05-31'),
 ('PETER OLDENDORFF', '2020-06-01'),
 ('PETER OLDENDORFF', '2020-06-02'),
 ('PETER OLDENDORFF', '2020-06-03'),
 ('PETER OLDENDORFF', '2020-06-04'),
 ('PETER OLDENDORFF', '2020-06-05'),
 ('PETER OLDENDORFF', '2020-06-06'),
 ('PETER OLDENDORFF', '2020-06-07'),
 ('PETER OLDENDORFF', '2020-06-08'),
 ('PETER OLDENDORFF', '2020-06-09'),
 ('PETER OLDENDORFF', '2020-06-10'),
 ('PETER OLDENDORFF', '2020-06-11'),
 ('ROBUSTO', '2020-06-01'),
 ('ROBUSTO', '2020-06-02'),
 ('ROBUSTO', '2020-06-03'),
 ('ROBUSTO', '2020-06-04'),
 ('ROBUSTO', '2020-06-05'),
 ('ROBUSTO', '2020-06-06'),
 ('ROBUSTO', '2020-06-07'),
 ('ROBUSTO', '2020-06-08'),
 ('ROBUSTO', '2020-06-09'),
 ('ROBUSTO', '2020-06-10'),
 ('ROBUSTO', '2020-06-11'),
 ('Rahi', '2020-06-09'),
 ('Rahi', '2020-06-10'),
 ('Rahi', '2020-06-11'),
 ('SHTP', '2020-06-05'),
 ('SHTP', '2020-06-06'),
 ('SHTP', '2020-06-07'),
 ('SHTP', '2020-06-08'),
 ('SHTP', '2020-06-09'),
 ('SHTP', '2020-06-10'),
 ('SHTP', '2020-06-11'),
 ('SUNRISE', '2020-06-10'),
 ('SUNRISE', '2020-06-11'),
 ('TIN CITY', '2020-06-06'),
 ('TIN CITY', '2020-06-07'),
 ('TIN CITY', '2020-06-08'),
 ('TIN CITY', '2020-06-09'),
 ('TIN CITY', '2020-06-10'),
 ('TIN CITY', '2020-06-11'),
 ('XIN FA HAI', '2020-05-29'),
 ('XIN FA HAI', '2020-05-30'),
 ('XIN FA HAI', '2020-05-31'),
 ('XIN FA HAI', '2020-06-01'),
 ('XIN FA HAI', '2020-06-02'),
 ('XIN FA HAI', '2020-06-03'),
 ('XIN FA HAI', '2020-06-04'),
 ('XIN FA HAI', '2020-06-05'),
 ('XIN FA HAI', '2020-06-06'),
 ('XIN FA HAI', '2020-06-07'),
 ('XIN FA HAI', '2020-06-08'),
 ('XIN FA HAI', '2020-06-09'),
 ('XIN FA HAI', '2020-06-10'),
 ('XIN FA HAI', '2020-06-11'),
 ('YASA UNITY', '2020-06-05'),
 ('YASA UNITY', '2020-06-06'),
 ('YASA UNITY', '2020-06-07'),
 ('YASA UNITY', '2020-06-08'),
 ('YASA UNITY', '2020-06-09'),
 ('YASA UNITY', '2020-06-10'),
 ('YASA UNITY', '2020-06-11')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...