#python #dataframe #pandas-groupby
Вопрос:
У меня есть набор данных, состоящий из измерений, и мой фрейм данных выглядит так:
ID VAL BS ERROR 0 0 0 0 1 1 0 1 2 1 0 1 3 0 0 0 4 11 10 1 5 10 10 0 6 12 10 2 7 11 10 1 8 9 10 -1 9 30 30 0 10 31 30 1 11 29 30 -1 12 10 10 0 13 9 10 -1 14 8 10 -2 15 11 10 1 16 0 0 0 17 1 0 1 18 2 0 2 19 9 10 -1 20 10 10 0
Где VAL
измеренное значение, BS
является базовым(округляется до ближайших 10) и ERROR
представляет собой разницу между измеренным значением и базой.
То, что я пытаюсь сделать, — это несколько сгруппировать по «БАЗОВОМУ» столбцу, но только для соседних строк.
Таким образом, результирующий набор данных будет выглядеть так (я также захочу рассчитать совокупную минимальную и максимальную ошибку для группы, но, думаю, это не будет проблемой)
В этом случае важно соблюдать порядок групп.
ID BS MIN MAX 0 0 0 1 1 10 -1 2 2 30 -1 1 3 10 -2 1 4 0 0 2 5 10 -1 0
Ответ №1:
Вы можете найти последовательные группы, подобные этой:
df['GROUP'] = (df['BS']!=df['BS'].shift()).cumsum()
Затем вы группируетесь по GROUP
столбцу и агрегируете min и max:
df.groupby(['GROUP', 'BS'])['ERROR'].agg(['min', 'max']).reset_index()
Результат должен быть:
GROUP BS min max 0 1 0 0 1 1 2 10 -1 2 2 3 30 -1 1 3 4 10 -2 1 4 5 0 0 2 5 6 10 -1 0
Комментарии:
1. Спасибо, это именно то, что я искал