Сумма и количество ненулевых последовательных значений в столбце данных - PullRequest
0 голосов
/ 10 мая 2019

У меня есть кадр данных в следующем формате:

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

Проблема в том, что этот код очень медленный для моих целей.Спасибо за помощь

1 Ответ

0 голосов
/ 10 мая 2019

только для того, чтобы помочь вам как подсказка

print(df.groupby("value")['value'].count())
print(df.groupby("value")['value'].mean())
print(df.groupby("value")['value'].sum())

попробуйте использовать groupby и следуйте его функциям

извините, просто ваш вопрос был не слишком ясным, без работы

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