У меня есть кадр данных в следующем формате:
timestamp, value
2019-05-03 20:19:19, 0.0
2019-05-03 20:19:20, 5.1
2019-05-03 20:19:21, 5.2
2019-05-03 20:19:22, 4.8
2019-05-03 20:19:23, 0.0
2019-05-03 20:19:24, 0.0
2019-05-03 20:19:25, 8.7
2019-05-03 20:19:26, 9.3
2019-05-03 20:19:27, 2.2
2019-05-03 20:19:28, 0.0
2019-05-03 20:19:29, 0.0
2019-05-03 20:19:30, 0.0
2019-05-03 20:19:31, 2.9
2019-05-03 20:19:32, 2.2
2019-05-03 20:19:33, 0.0
2019-05-03 20:19:34, 0.0
и т. Д.
Моя цель - извлечь последовательные ненулевые значения (события), а затем найти сумму, среднее исчитать для каждой из групп
Я хочу, чтобы выходные данные имели следующий формат:
[
[15.1,5.033,3],
[20.2,6.73,3],
[5.1,2.55,2],
and so on
]
В каждой строке будет 3 номера для каждого события.Первое число - сумма чисел в событии, третье число - количество чисел в событии, а второе число - среднее.Я пытался найти решение для SO, но не смог его найти.Также меня беспокоит эффективность времени, потому что я делаю это на большом кадре данных.
Это общий набросок кода, который у меня есть:
events_matrix = []
current_event = []
def collect_events(self, row):
time, value = row[0], row[1]
if value > 0.0:
current_event.append([time, value])
elif value == 0.0:
events_matrix.append(current_event)
current_event = []
data.apply(lambda x: self.collect_events(x), axis=1)
for index, event in enumerate(events_matrix):
duration = np.size(event, axis=0)
total_sum = np.sum(np.array(event)[:, 1].astype(np.float), axis=0)
average = (total_sum/duration)
flow_and_duration.append([total_sum, average, duration])
Проблема в том, что этот код очень медленный для моих целей.Спасибо за помощь