Pandas向量化实现:查找另一DataFrame中最近的未来时间
可以,使用pandas内置的merge_asof函数即可实现完全等效的向量化操作,替代逐行循环,大数据量下性能提升非常明显。
实现代码
# 把索引转为普通列用于匹配,pandas版本低于1.5.0可改用 a = a.rename_axis('a_dt').reset_index() 写法 a = a.reset_index(names='a_dt') b = b.reset_index(names='b_dt') # 核心逻辑:向前匹配,找右表第一个大于等于左表a_dt的记录 merge_result = pd.merge_asof( left=a, right=b, left_on='a_dt', right_on='b_dt', direction='forward' ) # 整理成和原逻辑一致的输出格式 a = merge_result.set_index('a_dt').rename(columns={'b_dt': 'next_b'}) # 只保留原a的列和新增的next_b列,删掉b中带来的其他无关列 a = a[[0, 'next_b']]
逻辑说明
merge_asof是pandas专门用于有序键匹配的向量化函数,其中direction='forward'参数刚好对应需求:从右表b中找到第一个大于等于左表a当前索引值的记录,匹配不到的位置自动返回NaT,和原循环逻辑完全一致。
注意使用该函数前需要保证两个表的匹配键(这里是两个DataFrame的索引)都是升序排列的,你示例中的数据默认生成的索引已经满足该条件。
内容的提问来源于stack exchange,提问作者D. Reagan
相关产品推荐
相关产品推荐

