Python 对于给定的时间戳,查找具有最接近时间戳的数据帧中的行索引

Python 对于给定的时间戳,查找具有最接近时间戳的数据帧中的行索引,python,pandas,dataframe,time-series,closest,Python,Pandas,Dataframe,Time Series,Closest,我有一个由3列(时间戳、名称、值)组成的数据帧 DF的行按时间戳升序排序 给定一个输入时间戳,该时间戳在DF和目标名称(保证在一行上)中可能不具有相同的匹配项 我想找到行的索引,其中: 行中的时间戳等于输入时间戳或 是比输入时间戳小的下一个,并且行的名称等于给定的名称 此外,时间戳中的时间戳都是唯一的 给定以下数据帧: row timestamp name value 0 1 A V1 1 3 B V2 2

我有一个由3列(时间戳、名称、值)组成的数据帧

DF的行按时间戳升序排序

给定一个输入时间戳,该时间戳在DF和目标名称(保证在一行上)中可能不具有相同的匹配项

我想找到行的索引,其中:

  • 行中的时间戳等于输入时间戳或

  • 是比输入时间戳小的下一个,并且行的名称等于给定的名称

  • 此外,时间戳中的时间戳都是唯一的

    给定以下数据帧:

    row   timestamp   name   value
    0     1           A      V1
    1     3           B      V2
    2     5           C      V3
    3     7           D      V4
    4     9           A      V5
    5     11          B      V6
    6     13          C      V7
    7     15          D      V8
    
    对于timestamp=3和name=B,索引应为1

    对于timestamp=6和name=C,索引应为2

    对于timestamp=13和name=A,索引应为4

    对于timestamp=6和name=D,索引应为NaN,因为在时间6时或之前没有值


    如何在pandas中实现这一点(希望是有效的?

    如果查询的数据框不是空的,您可以运行名称查询、按时间戳排序并获取具有最大值的项的索引。这样的办法应该行得通

    def run_query(df, search_name, search_timestamp):
        query = df.loc[(df['name'] == search_name) & (df['timestamp'] <= search_timestamp)] \
                  .sort_values('timestamp') 
        return None if query.empty else query.index[-1]
    
    def运行查询(df、搜索名称、搜索时间戳):
    query=df.loc[(df['name']==search_name)&(df['timestamp']