我有两个数据框list1和list2,它们分别具有不同数量的带有随机索引的行。list1有〜240,000行,而list2有〜390,000行。根据['time']列,从最早时间到最新时间对它们进行了排序。它们大致如下所示:清单1 time rates299 09:31 1.301230 10:34 2.4232 13:40 1.49 ... ...清单2 time Symbol IV78 10:31 aqb 7121 10:59 cdd 33240 11:19 oty 4393 13:54 zqb 844 14:13 omu 1 ... list2上的每一行都有一个['time']值。我希望list2中的每一行都具有list1中最新的['rates']值,且该值不晚于其自身的['time']值。在此之前,可以将相同的['rates']值填充到list2中(很抱歉,我知道这很令人困惑)。下面显示了所需结果的示例并进行了说明。期望的结果 time Symbol IV rates78 10:31 aqb 7 1.30121 10:59 cdd 3 2.423240 11:19 oty 4 2.42393 13:54 zqb 8 1.4944 14:13 omu 1 1.49list1中的第一行从9:31开始,第二行从10:34开始。list2的第一行位于10:31,因此应使用9:31的['rates']值代替10:34的rate值,因为10:34晚于10:31。list2中的下一行是10:59。list1中最后一个不在10:59之后的行是10:34,因此将10:34中的值2.42填充。list2中的第三行与11:19相同。在不使用for循环缓慢遍历每一行的iterrows()的情况下,如何做到这一点,如果在每个数据帧中只有几十万行的情况下进行其他检查,那将需要花费很长的时间来完成上述工作?谢谢!
2 回答

qq_笑_17
TA贡献1818条经验 获得超7个赞
我只是将['time']上的两个数据框与一个指标合并,然后在['time']上对新数据框进行了排序:
list2 = list2.merge(list1,how = 'outer', on= ['time'], indicator = True) list2 = list2.sort_values(['time'])
然后使用“ left_only”指示符填充行,从而通过使用“ right_only”指示符从具有“ right_only”指示符的行中获取具有最新值的Nan ['rates]]值:
list2= list2.fillna(method = 'ffill')
然后使用以下命令从list1中删除行:
list2= list2.loc[list2['_merge']!= 'right_only']
添加回答
举报
0/150
提交
取消