поиск первых последовательных групп значений по идентификаторам

#python #pandas #numpy #dataframe #data-manipulation

#python #панды #numpy #фрейм данных #манипулирование данными

Вопрос:

У меня есть фрейм данных, в котором я хочу сгруппировать первые последовательные значения для каждого идентификатора

 id   value 
a1   1
a1   3
a1   4
a2   1
a2   2 
a2   3
a2   5
a2   8
a2   9
  

Я хочу, чтобы вывод был помещен туда, где он идентифицирует «первую» последовательную группу для каждого идентификатора, я пробовал измерения различий, но только напрасно, поскольку он возвращает значения идентификаторов, которые являются последовательными после перерыва.

Мне нужен вывод такого рода

 id  value
a1  1
a2  1
a2  2
a2  3
  

был бы признателен за предложения

Комментарии:

1. Можете ли вы объяснить a2 2, a2 3 в выходных данных?

2. в основном для идентификатора a2 значения 1,2,3 являются первыми последовательными значениями для этого идентификатора. и значения 8,9 — это другая группа, которая является последовательной для того же идентификатора . Я искал первые последовательные значения

Ответ №1:

Идея заключается в создании последовательных групп путем сравнения разницы для не равных q с совокупной суммой, а затем для первых групп проверить первые значения GroupBy.transform с GroupBy.first помощью или GroupBy.min :

 s = df['value'].diff().ne(1).cumsum()
df1 = df[s.groupby(df['id']).transform('first').eq(s)]
#alternative
#df1 = df[s.groupby(df['id']).transform('min').eq(s)]
print (df1)
   id  value
0  a1      1
3  a2      1
4  a2      2
5  a2      3