首页 > 解决方案 > 在日期间隔中查找 2 个日期的价格的快速方法

问题描述

对于我 df 中的所有酒店预订,我尝试在 prices_df 中查找价格。但是,在prices_df 中。指定了可以预订此项目的开始时间和截止时间(又名 RESERVATION_DATE 有效)。此外,此价格在哪个日期(从开始到结束)有效(又名 STAY_DATE)。下面的循环需要永远。

print df

    STAY_DATE   ROOM_ID RESERVATION_DATE    
0   2021-07-15  201     2020-09-21  
1   2019-09-23  2       2019-04-13          
2   2018-03-11  4       2017-03-13  
3   2018-10-26  8       2018-08-02  
4   2019-02-26  13      2018-09-24  

print prices_df

    ROOM_ID     BOOKDATE_FROM   BOOKDATE_TO USAGE_DATE_FROM USAGE_DATE_TO   PRICE
0   5           2016-09-09      2017-03-29  2017-08-14      2017-08-21      118
1   13          2016-09-09      2017-03-29  2017-08-14      2017-08-21      125
2   11          2016-09-09      2017-03-29  2017-08-25      2017-08-28      139
3   13          2016-09-09      2017-03-29  2017-08-25      2017-08-28      165
4   15          2016-09-09      2017-03-29  2017-08-25      2017-08-28      101

def loop(df, prices_df):
    test['PRICE'] = 0
    for i in range(len(df)):
        mask_resource = prices_df['ROOM_ID'] == df['ROOM_ID'].iloc[i]
        mask_stay = (prices_df['USAGE_DATE_FROM'] < df['STAY_DATE'].iloc[i]) & (df['STAY_DATE'].iloc[i] < prices_df['USAGE_DATE_TO_NEW'])
        mask_book = (prices_df['BOOKDATE_FROM'] < df['RESERVATION_DATE'].iloc[i]) & (df['RESERVATION_DATE'].iloc[i] < prices_df['BOOKDATE_TO'])
    
        df['PRICE'].iloc[i] = prices_df[mask_resource & mask_stay & mask_book]['PRICE'].mean()

在最后一步中,我取平均值,因为可能有超过 1 个可用的价格。

标签: pythonfor-loopintervals

解决方案


推荐阅读