Для данной временной отметки найдите индекс строки в кадре данных с ближайшей временной отметкой. - PullRequest
0 голосов
/ 22 января 2020

У меня есть DataFrame, который состоит из 3 столбцов (временная метка, имя, значение).

Строки DF сортируются по временной метке в порядке возрастания.

Учитывая входную временную метку, которая может не иметь одинакового совпадения в DF и имени цели (которое гарантированно будет в строке).

Я хотел бы найти индекс для строки, где:

  1. Метка времени в строке либо равна входной метке времени, либо

  2. На следующий раз меньше входной метки времени, а имя строки равно заданному имени.

Кроме того, все метки времени в метке времени являются уникальными.

Учитывая следующий DataFrame:

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 * 1030 или перед ним нет значения. *

Как это будет сделано (надеюсь, эффективно) в pandas?

1 Ответ

0 голосов
/ 22 января 2020

Вы можете выполнить запрос по имени, отсортировать по отметке времени и получить индекс элемента с наибольшим значением, если запрашиваемый фрейм данных не пустой. Нечто подобное должно работать.

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]
...