Найти, когда значение повторяется в пандах - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть кадр данных температур (Temp) с двумя столбцами:

  • Время
  • Температура

И у меня есть другие данныекадр (Activated) с одним столбцом, который описывает времена, когда какое-либо оборудование активировано:

  • Время

Оба этих кадра данных находятся за один и тот же период, и каждый«TimeStamp» существует в обоих.

Я хочу знать, для каждого времени в Activated фрейме данных, сколько времени прошло до повышения температуры.

Я знаю, как это сделать "Стиль "С", с двумя циклами for (один перебирает Activated находит время в Temp, а затем переходит в цикле вперед, пока не найдет более высокую температуру).

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

Temp

1 25.6
2 25.4
3 24
4 25.8
5 23.2
6 24.3
7 28.1

Activated

2
4

Для первой строки в Activated время равно 2 - температураво время 2 было 25.4, результат должен быть 2, потому что только во время 4 он повышался.Для второй строки в Activated время равно 4 - температура во времени 4 была 25.8, результат должен быть 3, потому что только во время 7 она поднялась.

выход для 2 равен 2, а для 4 равен 3

1 Ответ

0 голосов
/ 23 ноября 2018

Вот частично векторизованное решение.Примечание pd.Series.apply - это просто цикл уровня Python.

temp = pd.DataFrame({'Time': list(range(1, 8)),
                     'Temperature': [25.6, 25.4, 24, 25.8, 23.2, 24.3, 28.1]})

activated = pd.DataFrame({'Time': [2, 4]})

def time_until_higher(x):
    current_temp = temp_s.at[x]
    diffs = temp_s[temp_s.index > x] - current_temp
    return (diffs < 0).values.argmin() + 1

temp_s = temp.set_index('Time')['Temperature']  # assume times are sorted
activated['Next'] = activated['Time'].apply(time_until_higher)

print(activated)

   Time  Next
0     2     2
1     4     3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...