Это может быть не самым эффективным, но это работает! Мне бы тоже хотелось узнать о наиболее эффективном способе сделать это!
Решение:
def getForDF1(row):
row['Value_1'],row['Value_2']= \
df2[(df2['Date']>=row['StartDate']) & (df2['Date']<=row['EndDate'])].sum()[['Value_1','Value_2']]
return row
df1=df1.apply(getForDF1,axis=1)
P.S. Ваш код не работает, так как timedelta не может работать для всей серии.
df1["EndDate"] = df1["StartDate"] + datetime.timedelta(5)
Чтобы упростить иллюстрацию, я изменил значения вашего df:
Начальная настройка:
import pandas as pd
StartDate=['2016-01-01','2016-01-13','2016-01-25','2016-02-06','2016-02-18']
EndDate=['2016-01-12','2016-01-24','2016-01-05','2016-02-17','2016-02-29']
value_3=[1,2,3,4,5]
Date=['2016-01-01','2016-01-02','2016-02-10','2016-02-11','2016-02-18']
value_1=[3,4,5,6,7]
value_2=[0,1,3,5,7]
df1=pd.DataFrame({'StartDate':StartDate,'EndDate':EndDate,'Value_3':value_3})
df2=pd.DataFrame({'Date':Date,'Value_1':value_1,'Value_2':value_2})
df1['EndDate']=pd.to_datetime(df1['EndDate'])
df1['StartDate']=pd.to_datetime(df1['StartDate'])
df2['Date']=pd.to_datetime(df2['Date'])