如何在pandas DataFrame中查找首个索引≥指定值的行的整数位置?
解决pandas datetime索引的首个≥目标值行的整数位置查找问题
由于你的DataFrame索引是已排序、无重复的np.datetime64类型,最适合的方法是使用df.index.searchsorted(),它专门针对有序索引做二分查找,直接返回符合要求的整数位置,完美匹配你的需求:
核心用法
searchsorted()默认采用side='left'参数,会返回第一个大于等于目标值的索引位置,这个位置可以直接传给iloc[]使用,而且效率极高(O(log n)),适合大数据集重复复用。
示例代码:
import pandas as pd import numpy as np # 假设你的DataFrame已经加载完成 # target_dt 是你要查找的np.datetime64类型值 target_dt = np.datetime64('2023-10-01 12:00:00') # 获取整数位置 pos = df.index.searchsorted(target_dt) # 处理边界情况:如果目标值大于所有索引,pos会等于df的行数 if pos < len(df): # 用iloc获取对应行 result_row = df.iloc[pos] else: # 没有符合条件的行,按需处理(比如返回最后一行或提示) print("没有找到大于等于目标时间的行")
为什么不用loc?
loc[]需要精确匹配索引值,不存在时会抛出KeyError,无法直接返回首个≥目标值的行searchsorted()基于二分查找,比遍历查找效率高得多,返回的整数位置可以存储下来重复使用,避免对大数据集重复查找
内容的提问来源于stack exchange,提问作者Leon
相关产品推荐
相关产品推荐

