Как идентифицировать подмножества с непрерывным индексом внутри фрейма данных - PullRequest
0 голосов
/ 06 июня 2018

У меня есть фрейм данных, который определен примерно так:

df = pd.DataFrame({'A':[5,8,96,3,5,41,2,45,7,8], 'B':[1,2,3,5,6,10,11,12,13,18]})
df = df.set_index('B')
df.index.name = None

Моя цель - назначить подмножествам фреймов данных, которые имеют непрерывный индекс, значение, подобное следующему:

enter image description here

Алгоритм : Как видно из изображения, первые 3 строки имеют индекс 1,2,3, который увеличивается на 1 (таким образом, непрерывно).Поэтому я присваиваю этому подмножеству значение 0 в столбце C. Второе подмножество образовано строками, имеющими непрерывные индексы 5 и 6 (обратите внимание, что индекса 4 нет!).Поэтому я присваиваю им значение 1 в столбце C.

Вопрос : Вы знаете эффективный и умный способ достижения такого результата?Я смог достичь такого результата, используя множество циклов for и ifs, но это было довольно неприятно.

1 Ответ

0 голосов
/ 06 июня 2018

Вы можете использовать diff с cumsum;Вычислите diff, проверьте, равно ли оно 1 (последовательное условие), а затем cumsum (количество) непоследовательных прыжков:

df['C'] = df.index.to_series().diff().ne(1).cumsum().sub(1) 

df
#     A  C
#1    5  0
#2    8  0
#3   96  0
#5    3  1
#6    5  1
#10  41  2
#11   2  2
#12  45  2
#13   7  2
#18   8  3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...