字典和列表对元组的列表理解

时间:2020-06-17 16:50:47

标签: python pandas list-comprehension dictionary-comprehension

我试图从以下数据中找出如何创建date:vessel元组组合的列表:

  • 船只清单
  • 船只到达日期列表
  • 计划时间表中的日期列表

(船只,日期)必须包含从船只到达日期起的日期范围内的所有可能的vessel:日期组合(船只无法在到达之前离开)。

所需的输出:示例

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')]

到目前为止,我已经尝试了使用熊猫数据框提取日期的理解方法中的两种方法

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 :(得分:0)

让我们尝试一下:

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')]
相关问题