#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