使用两个数据框比较开始日期和结束日期之间的日期

Posted

技术标签:

【中文标题】使用两个数据框比较开始日期和结束日期之间的日期【英文标题】:Compare dates between start date and end date with two dataframe 【发布时间】:2020-05-22 08:34:24 【问题描述】:

我有两个数据框。两者都是不同的形状。 第一个数据框:-

     start_date        end_date    id
01  15/03/19 15:30  31/03/19 15:30  11
02  31/03/19 15:30  15/04/19 15:30  12
03  15/04/19 15:30  30/04/19 15:30  13

第二个数据框:-

   item_id  purchase_at    amount
0   100     15/03/19 15:33  149
1   200     8/04/19 15:47   4600
2   300     17/04/19 15:31  8200
3   400     20/04/19 16:00  350

我想要预期的输出:-

   item_id  purchase_at    amount id 
0   100     15/03/19 15:33  149   11
1   200     8/04/19 15:47   4600  12
2   300     17/04/19 15:31  8200  13
3   400     20/04/19 16:00  350   13

如何得到它的预期输出?

【问题讨论】:

到目前为止你有什么尝试? @RMPR 我尝试了多种方法,但发现错误一种方法如下:***.com/questions/46605913/… 但是如何在两个数据帧之间进行比较? 【参考方案1】:
## https://***.com/questions/44053666/python-assign-value-to-pandas-df-if-falls-between-range-of-dates-in-another-df
s = pd.Series(df1['id'].values, pd.IntervalIndex.from_arrays(df1['start_date'], df1['end_date']))

# Map based on the date of df_a.
df2['id'] = df2['purchase_at'].map(s)

输出:-

   item_id  purchase_at    amount id 
0   100     15/03/19 15:33  149   11
1   200     8/04/19 15:47   4600  12
2   300     17/04/19 15:31  8200  13
3   400     20/04/19 16:00  350   13

【讨论】:

【参考方案2】:

这是 0.20 之前的 Pandas 版本没有IntervalIndex 的方法:

df2['purchase_at'] = pd.to_datetime(df2['purchase_at'], dayfirst=True)
df2.set_index('purchase_at', inplace=True)
df2['id'] = 0
for _, d in df1.iterrows(): df2.loc[d['start_date']:d['end_date'], 'id'] = d['id']

它使用datetime string indexing。

【讨论】:

以上是关于使用两个数据框比较开始日期和结束日期之间的日期的主要内容,如果未能解决你的问题,请参考以下文章

Pandas - 将具有开始和结束日期的数据框转换为每日数据

如何对位于开始日期和结束日期之间的一组值求和?

sql server 中两个日期之间的年份以及每个日期在 sql server 中的开始和结束日期

js怎么计算开始日期与结束日期之间的时间

SQL 日期过滤器:当开始日期 = 结束日期时返回结果

如何打印数据框的开始日期和结束日期?