Pandas 在给定值列表的数据框列中找到最接近值的索引

Pandas find the index of the closest value in a data frame column given a list of values

所以我试图找到一种矢量化方法来执行此操作,假设我有一个数据框 DF1,其中包含一个时间戳列,其中有很多时间戳按递增顺序排列。我还有一个包含目标时间的列表,我想用它来查找 DF1 中包含最接近该目标时间的时间戳的行或该行的索引。我有一个使用 iterrows 的解决方案,但我想知道是否有一种方法可以不用 iterrows 来实现它,因为这可能需要很长时间。

数据框中的行数总是大于目标时间值列表。 如果目标时间介于两个时间戳之间,则始终选择最小的时间戳。

#Dataframe with timestamp
In [1]: df = pd.DataFrame([100, 150, 155, 180,185, 200], columns=['TimeStamp'])
#List of target times
targetTimes = [120, 130, 180, 187]

答案应该是:

#A list of indices
[0, 1, 3, 4]
#Or something like this
Out[1]: 
   TimeStamp
0    100
1    150
2    180
3    185 

使用 merge_asof 将列表转换为一列 DataFrame:

df1 = pd.DataFrame(targetTimes, columns=['new'])

df = pd.merge_asof(df1, 
                   df, 
                   left_on='new', 
                   right_on='TimeStamp',
                   direction='nearest')
print (df)
   new  TimeStamp
0  120        100
1  130        150
2  180        180
3  187        185