Группировка по значению в предыдущей строке
У меня есть столбец со списком значений, например, так:
100
200
300
500
600
650
1000
Я хочу сделать Groupby
(или аналогичная эффективная конструкция), чтобы получить пакеты строк, в которых значение каждой строки находится в пределах 100
последнего ряда.
В этом случае партии, полученные из приведенного выше примера, будут
100, 200, 300
,
500, 600, 650
1000
Это возможно сделать в Пандах? Поскольку Pandas пытается разрешить SQL-подобные запросы, я предполагаю, что так и должно быть.
1 ответ
Вы можете использовать подход, аналогичный описанному в ответе на этот вопрос. Это в основном трехэтапный процесс:
- использование
shift
вычислить междурядный критерий, который вы хотите выделить. - использование
cumsum
суммировать этот критерий для создания новой серии с отдельными "блоками" по одному значению для каждой группы. - Группа на этой новой серии.
Вот пример:
>>> x = pandas.Series([100, 200, 300, 500, 600, 650, 1000, 900, 750])
>>> x.groupby(((x - x.shift()).abs() > 100).cumsum()).apply(list)
0 [100, 200, 300]
1 [500, 600, 650]
2 [1000, 900]
3 [750]
dtype: object
Обратите внимание, что я использовал критерий > 100
, который является противоположностью <= 100
критерий вы упомянули. При таком подходе вам нужно использовать критерий для разделения групп, а не критерий для их объединения, поэтому вы должны использовать отрицание вашего критерия группировки.