我有两个DataFrame:
date value
2019-09-12 17:10:31 1
2019-09-12 17:10:31 0.5
2019-09-12 17:10:35 2
2019-09-12 17:10:36 1
. .
. .
. .
第二个:
date1 value1
2019-09-12 17:10:22 0.2
2019-09-12 17:10:24 0.3
2019-09-12 17:10:30 0.002
2019-09-12 17:10:46 0.11
. .
. .
. .
在第一个df中,我想添加一列,其中包含有关从“日期-60秒”到“日期”的value1之和的信息。我做了这样的事情:
def volume_traded(df, interval, df1):
return df.date.apply(lambda x: get_volume_in_interval(x, interval, df1))
def get_volume_in_interval(time, interval, df1):
temp = df1[(df1.date1 < time) & (df1.date1 > time -
datetime.timedelta(seconds=interval))]
return temp.value.sum()
这个解决方案真的很慢(我说的是大约有20-50k行的数据帧
答案 0 :(得分:0)
使用numpy
广播
s1=df1.date.values
s2=df2.date1.values
s=(s1-s2[:,None])/np.timedelta64(1, 's')
((s<0)&(s>-60)).dot(df2.value1)
Out[94]: array([0. , 0. , 0. , 0.612])