快速加入两个DataFrame

时间:2019-09-13 15:47:30

标签: python pandas dataframe join

我有两个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行的数据帧

1 个答案:

答案 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])