Получить первую неделю в ряду последовательных недель в DataFrame

#python #pandas #group-by

#python #pandas #группировать по #группировка по

Вопрос:

Я работал, пытаясь получить первую неделю подряд для определенного идентификатора в фрейме данных, подобном этому:

 week     id
 1        1
 2        1
 3        1
 6        1
 7        1
 8        1
 3        2
 4        2
  

Таким образом, для идентификатора 1 есть три недели подряд (1-3), затем снова три недели подряд (6-8), а для идентификатора 2 есть 2 (3-4). Итак, мой желаемый результат будет:

 week     id   first_week
 1        1       1
 2        1       1
 3        1       1
 6        1       6
 7        1       6
 8        1       6
 3        2       3
 4        2       3
  

Я смог подсчитать количество последовательных недель с помощью этого:

 df.groupby(['id',df['week'].diff(-1).ne(-1).shift().bfill().cumsum()]).transform('count')
  

Но я не могу найти первую неделю (я хочу создать новый идентификатор, который добавляет, на какой неделе началась серия последовательных недель)

Ответ №1:

groupby получить diff , и назначить условие, затем просто ffill nan

 df.loc[df.groupby('id').week.diff().ne(1),'fw']=df.week
df.fw=df.fw.ffill()
df
Out[158]: 
   week  id   fw
0     1   1  1.0
1     2   1  1.0
2     3   1  1.0
3     6   1  6.0
4     7   1  6.0
5     8   1  6.0
6     3   2  3.0
7     4   2  3.0
  

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

1. Идеально! Именно то, что я искал. Знаете ли вы какие-либо ресурсы, где я могу узнать больше о более продвинутых способах использования groupby ? Я привык группировать только по одному или нескольким столбцам, а затем применять функцию агрегирования, и я хотел бы начать понимать другие способы использования

2. @JuanC привет, pandas.pydata.org/pandas-docs/stable/user_guide/cookbook.html , использование ‘advance groupby’ объединяется с другими. И надеюсь, что ссылка может помочь .