Итерация по значениям начала, конца и класса в Python - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть небольшой скрипт, который создает новый столбец в моем наборе данных pandas под названием class и назначает значения класса для данного временного диапазона.Это работает хорошо, но внезапно у меня есть тысячи временных диапазонов для ввода, и я подумал, можно ли написать какой-то цикл, который получает три столбца (начало, конец и класс) из кадра данных pandas.

dataset1
dataset2

Чтобы усложнить ситуацию, временные интервалы имеют нерегулярный интервал в кадре данных 1 (например,наносекунда, 30 секунд, 4 минуты) и в кадре данных 2 (который содержит данные акселерометра) данные временного ряда увеличиваются с шагом 0,010 секунды.Любая помощь приветствуется, поскольку я новичок в Python.

conditions = [(X['DATETIME'] < '2017-11-17 07:31:07') & (X['DATETIME']>= '2017-11-17 00:00:00'),(X['DATETIME'] < '2017-11-17 07:32:35') & (X['DATETIME']>= '2017-11-17 07:31:07'),(X['DATETIME'] < '2017-11-17 09:01:05') & (X['DATETIME']>= '2017-11-17 08:58:39')]
classes = ['0','1','2']
X['CLASS'] = np.select(conditions, classes, default='5')

1 Ответ

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

Существует много возможных решений, вы можете использовать для циклов, как вы сказали, и т. Д. Но если вы новичок в Python, я думаю, что этот ответ покажет вам больше о силе Python и его замечательных пакетов.Я буду использовать пакет numpy здесь.И я полагаю, что ваша первая таблица находится во фрейме данных pandas с именем X, а вторая таблица с именем condidtions.

import numpy as np
X['CLASS'] = conditions['CLASS'].iloc[np.digitize(X['Datetime'].view('i8'),
                                                  conditions['Start'].view('i8')) - 1]

Не волнуйтесь, я не позволю вам там.Таким образом, np.digitize берет свой первый список и складывает его на основе границ корзины, определенных вторым аргументом.Таким образом, здесь вы получите индекс condition, соответствующий времени в данной строке.

Следует отметить пару деталей:

  • .view('i8') обеспечивает представление объекта datetime, который может быть легко использован пакетом numpy (есливы заинтересованы, вы можете прочитать больше о деталях)
  • -1 необходим для выравнивания результатов (значение после начала первого условия получит значение 1, но мы хотим егочтобы начать с 0.
  • , в конце мы используем функцию iloc серии conditions['CLASS'], чтобы сопоставить эти индексы со значениями класса.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...