使用两个数据框比较开始日期和结束日期之间的日期
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 - 将具有开始和结束日期的数据框转换为每日数据