Merging two dataframes based on a date between two other dates without a common column

后端 未结 1 657
一向
一向 2020-12-05 07:54

I have two dataframes that I need to merge based on whether or not a date value fits in between two other dates. Basically, I need to perform an outer join where B.eve

相关标签:
1条回答
  • 2020-12-05 08:47

    Create data and format to datetimes:

    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)
    

    Create keys to do a cross join:

    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)
    

    Filter out records that do not meet criteria of event dates between start and end dates:

    df_merge = df_merge.query('event_date >= start_date and event_date <= end_date')
    

    Join back to original date range table and drop key column

    df_out = df_A.merge(df_merge, on=['start_date','end_date'], how='left').fillna('').drop('key', axis=1)
    
    print(df_out)
    

    Output:

                  end_date           start_date           event_date price
    0  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   100
    2  2017-02-01 00:00:00  2017-01-10 00:00:00  2017-01-27 00:00:00   200
    
    0 讨论(0)
提交回复
热议问题