Как сгруппировать данные подмножества по нерегулярным значениям столбцов - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть фрейм данных:

        id      timestamp               value   start 
31833   32074   2012-01-06 15:20:09.830 45.0    0
31834   32075   2012-01-06 15:20:09.930 45.5    1
31835   32076   2012-01-06 15:20:18.833 25.0    0
...

50000   32076   2012-12-27 15:20:18.833 15.0    1
50000   32076   2012-12-28 22:12:18.833 15.0    0
50000   32076   2012-12-29 23:00:18.833 15.0    0

start - фиктивная переменная, принимающая 0 или 1 и не находящаяся через регулярные интервалы (поступающие через случайные интервалы) в фрейме данных. Как я могу сгруппировать данные в поднаборы данных, которые начинаются с start ==1 до непосредственно перед следующим start ==1, чтобы я мог рассчитать среднее значение value в каждом поднаборе данных?

Какие методы я могу использовать для достижения этой цели? Должен ли я использовать какое-то время l oop? Я не делал ничего подобного раньше, просто хочу несколько идей. Thx

Ожидаемый результат:

        id      timestamp_when_start=1   last_timestamp_in_subdataset  average 
31833   32074   2012-01-06 15:20:09.830  2012-01-06 15:20:09.830       40
31834   32075   2012-01-06 15:20:09.930  2012-01-06 15:20:09.930       35
31835   32076   2012-01-06 15:20:18.833  2012-01-06 15:20:18.833       35
31836   32077   2012-01-06 15:20:20.835  2012-01-06 15:20:20.835       35
...

или

        id      timestamp               value   start  average
31833   32074   2012-01-06 15:20:09.830 45.0    0      40
31834   32075   2012-01-06 15:20:09.930 45.5    1      35
31835   32076   2012-01-06 15:20:18.833 25.0    0      35
31836   32077   2012-01-06 15:20:20.835 38.0    0      35
...

1 Ответ

0 голосов
/ 13 апреля 2020

Как предложил Ben.T, сначала создайте групповую переменную, выполнив cumsum из начала

df['group'] = df['start'].cumsum()

Затем сгруппируйте и выполните агрегирование

df.groupby('group').agg({'id':'min', 'timestamp':['min', 'max'], 'value':'mean'})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...