创建日期时间的数据和格式:
df_A = pd.Dataframe({'start_date':['2017-03-27','2017-01-10'],'end_date':['2017-04-20','2017-02-01']})df_B = pd.Dataframe({'event_date':['2017-01-20','2017-01-27'],'price':[100,200]})df_A['end_date'] = pd.to_datetime(df_A.end_date)df_A['start_date'] = pd.to_datetime(df_A.start_date)df_B['event_date'] = pd.to_datetime(df_B.event_date)创建键进行交叉连接:
df_A = df_A.assign(key=1)df_B = df_B.assign(key=1)df_merge = pd.merge(df_A, df_B, on='key').drop('key',axis=1)筛选出在开始日期和结束日期之间不符合事件日期条件的记录:
df_merge = df_merge.query('event_date >= start_date and event_date <= end_date')加入原始日期范围表并放下关键列
df_out = df_A.merge(df_merge, on=['start_date','end_date'], how='left').fillna('').drop('key', axis=1)print(df_out)输出:
end_datestart_dateevent_date price0 2017-04-20 00:00:00 2017-03-27 00:00:00 1 2017-02-01 00:00:00 2017-01-10 00:00:00 2017-01-20 00:00:00 1002 2017-02-01 00:00:00 2017-01-10 00:00:00 2017-01-27 00:00:00 200



