【问题标题】:Fast joining two DataFrames快速加入两个 DataFrame
【发布时间】:2019-09-13 15:47:30
【问题描述】:

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

【问题讨论】:

    标签: python pandas dataframe join


    【解决方案1】:

    使用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])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 2017-05-11
      • 2018-03-16
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      相关资源
      最近更新 更多