【问题标题】:For a given timestamp find index of row in a dataframe with closest timestamp对于给定的时间戳,在数据框中查找具有最接近时间戳的行的索引
【发布时间】:2020-05-08 03:28:57
【问题描述】:

我有一个由 3 列(时间戳、名称、值)组成的 DataFrame。

DF 的行按时间戳升序排序。

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

我想找到以下行的索引:

  1. 行中的时间戳等于输入时间戳或

  2. 下一个小于输入时间戳并且行的名称等于给定的名称。

而且时间戳中的时间戳都是唯一的。

给定以下数据框:

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

对于时间戳 = 3 和名称 = B,索引应为 1

对于时间戳 = 6 和名称 = C,索引应为 2

对于时间戳 = 13 和名称 = A,索引应为 4

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

如何在 pandas 中实现(希望有效)?

【问题讨论】:

    标签: python pandas dataframe time-series closest


    【解决方案1】:

    如果查询的数据框不为空,您可以运行名称查询、按时间戳排序并获取具有最大值的项目的索引。这样的事情应该可以工作。

    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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      • 2016-05-31
      • 2019-08-12
      • 2015-06-01
      • 1970-01-01
      • 2015-08-19
      • 1970-01-01
      相关资源
      最近更新 更多