Группировка по значению в предыдущей строке

У меня есть столбец со списком значений, например, так:

100
200
300
500
600
650
1000

Я хочу сделать Groupby (или аналогичная эффективная конструкция), чтобы получить пакеты строк, в которых значение каждой строки находится в пределах 100 последнего ряда.

В этом случае партии, полученные из приведенного выше примера, будут

100, 200, 300,

500, 600, 650

1000

Это возможно сделать в Пандах? Поскольку Pandas пытается разрешить SQL-подобные запросы, я предполагаю, что так и должно быть.

1 ответ

Решение

Вы можете использовать подход, аналогичный описанному в ответе на этот вопрос. Это в основном трехэтапный процесс:

  1. использование shift вычислить междурядный критерий, который вы хотите выделить.
  2. использование cumsum суммировать этот критерий для создания новой серии с отдельными "блоками" по одному значению для каждой группы.
  3. Группа на этой новой серии.

Вот пример:

>>> 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 критерий вы упомянули. При таком подходе вам нужно использовать критерий для разделения групп, а не критерий для их объединения, поэтому вы должны использовать отрицание вашего критерия группировки.

Другие вопросы по тегам