Pandas 熊猫-给定一个已排序的数据帧和目标值列表,如何一次性检索这些值旁边的行

Pandas 熊猫-给定一个已排序的数据帧和目标值列表,如何一次性检索这些值旁边的行,pandas,Pandas,假设我有一个排序的数据帧和一个目标值列表,如下所示 In [57]: df Out[57]: value 0 1 1 2 2 3 3 4 4 5 5 6 In [58]: target_values=[1.5, 3.5, 5.5] 我想要得到的是第一行,它的值分别大于等于目标值。在上面的示例中,这些行的索引是[1,3,5] 我可以通过以下代码实现目标 In [60]: [df[df.value >= t].iloc[0]

假设我有一个排序的数据帧和一个目标值列表,如下所示

In [57]: df
Out[57]: 
   value
0      1
1      2
2      3
3      4
4      5
5      6
In [58]: target_values=[1.5, 3.5, 5.5]
我想要得到的是第一行,它的值分别大于等于目标值。在上面的示例中,这些行的索引是[1,3,5]

我可以通过以下代码实现目标

In [60]: [df[df.value >= t].iloc[0] for t in target_values]
但是,它将扫描数据帧的len(目标_值)次。是否有只需一次扫描即可实现目标的功能

#构建成对差分矩阵
#build a pair wise difference matrix
pairwise_diff = df.values[:,None]-target_values

#find the non-negative min diff for each value in target values.
np.ma.array(pairwise_diff,mask=(pairwise_diff<0)).argmin(0)
Out[178]: array([[1, 3, 5]], dtype=int64)
成对差异=df.值[:,无]-目标值 #找到目标值中每个值的非负最小差值。 np.ma.array(pairwise_diff,mask=(pairwise_diff调用它)。您可以使用方法,或者

熊猫

df.value.searchsorted(target_values)

array([1, 3, 5])
df.value.values.searchsorted(target_values)

array([1, 3, 5])
numpy

df.value.searchsorted(target_values)

array([1, 3, 5])
df.value.values.searchsorted(target_values)

array([1, 3, 5])