【问题标题】:Pandas find the index of the closest value in a data frame column given a list of valuesPandas 在给定值列表的情况下查找数据框列中最接近值的索引
【发布时间】:2020-11-19 10:08:22
【问题描述】:

所以我试图找到一种矢量化的方法来做到这一点,比如说我有一个数据框 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 

【问题讨论】:

    标签: python python-3.x pandas dataframe vectorization


    【解决方案1】:

    使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 2021-11-20
      相关资源
      最近更新 更多