我有两个数据帧,分别称为A和B。A具有elementID,startDate,endDate列,而B具有elementID,date,dataValue列。我想向A添加一个“平均”列。对于A中的任何特定行,我们都应该有row.average = B[(B.elementID==row.elementID) & (row.startDate <= B.date) & (row.endDate >= B.date)].mean().
目前,我只是天真地遍历A的每一列并计算B [(B.elementID == row.elementID)&(row.startDate <= B.date)&(row.endDate> = B.date) ]。意思()。但是,A和B的行数都在1000万左右,并且开始/结束日期最多可以相隔2年,因此这种方法花费的时间太长。
具体来说,A看起来像
ID startDate endDate
3093 2015-01-09 2015-01-23
3093 2015-01-13 2015-03-20
3093 2015-01-20 2015-02-27
3093 2015-01-26 2015-03-06
3093 2015-01-27 2015-04-17
3093 2015-02-01 2015-07-17
3093 2015-02-03 2015-02-27
3093 2015-02-04 2016-01-15
...
B看起来像
ID date dataValue
512 2014-12-31 0.1285
3093 2014-12-31 0.1176
3101 2014-12-31 0.1591
3103 2015-01-12 0.3001
3105 2015-01-12 0.2306
3107 2015-01-12 0.1524
3107 2015-01-13 0.0000
3107 2015-01-14 0.1739
3112 2015-01-15 0.0370
...