为了账号安全,请及时绑定邮箱和手机立即绑定

用另一列的最新值填充数据框列

用另一列的最新值填充数据框列

德玛西亚99 2021-05-20 18:01:05
我有两个数据框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']


查看完整回答
反对 回复 2021-05-25
  • 2 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号