#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’ объединяется с другими. И надеюсь, что ссылка может помочь .