Я использую numpy
трансляцию, которая является o (m * n) метод
#data1.Start_Time=pd.to_datetime(data1.Start_Time)
#data1.End_Time=pd.to_datetime(data1.End_Time)
s1=data1.Start_Time.values
s2=data1.End_Time.values
s=data2.date.values
a=np.dot((s[:,None]>=s1)&(s[:,None]<=s2),data1.Value.values)
Out[639]:
array([68, 68, 68, 68, 0, 0, 0, 0, 0, 0, 0, 70, 70, 70, 70, 70, 70,
70, 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 90, 90, 90,
90, 90], dtype=int64)
data2['Value']=a