python - 在日期间隔中查找 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 个可用的价格。
解决方案
推荐阅读
- discord - discord.js 欢迎留言
- firebase - 一起使用 @ngrx/effects 和 firebase 的问题。成功动作立即触发
- c# - OnCollisionEnter 不适用于对象的副本
- python - 是否可以一次从 div 类中的 div 类中抓取所有文本?
- javascript - CommonJS + node-fetch 无法使用 Intellisense 类型
- ios - 分段选择器不让我选择不同的选择
- javascript - 以最少的重写代码使我的 HTML 代码响应移动设备的最佳方法是什么?
- python - 如果 ManyToManyField 中的对象如何注释查询集
- c# - Stripe API - 基于元数据的搜索
- apache-spark - 使用 Azure Identity 凭据进行 Spark 访问 Blob 存储