сгруппируйте по идентификатору и посчитайте уникальные даты начала по каждому идентификатору. Отбрасывать обратно в dataframe. Pandas

#python-3.x #pandas #dataframe #pandas-groupby #transformation

#python-3.x #pandas #dataframe #pandas-группировка #преобразование

Вопрос:

У меня есть фрейм данных pandas:

 pd.DataFrame({
    'student_id': ['5', '5', '5', '5', '2', '2'],
    'start_date': ['2020-11-11', '2020-11-11', '2020-11-11', '2020-12-05', '2020-11-25', '2020-11-25']
})
 

Я хочу сгруппировать df по ‘student_id’ и подсчитать, сколько одинаковых дат начала встречается для каждой строки. Затем я хочу вернуть это обратно в исходный фрейм данных. Например, я бы создал новый столбец с именем ‘course_enroll_count’. В первых трех строках будет отображаться 3, потому что у учащегося есть 3 даты начала «2020-11-11».
Ожидаемый результат:

 pd.DataFrame({
    'student_id': ['5', '5', '5', '5', '2', '2'],
    'start_date': ['2020-11-11', '2020-11-11', '2020-11-11', '2020-12-05', '2020-11-25', '2020-11-25'],
    'course_enroll_count': [3, 3, 3, 1, 2, 2]
})
 

Ответ №1:

Попробуйте с transform

 df['new'] = df.groupby(['student_id','start_date'])['start_date'].transform('count')
df
Out[313]: 
  student_id  start_date  new
0          5  2020-11-11    3
1          5  2020-11-11    3
2          5  2020-11-11    3
3          5  2020-12-05    1
4          2  2020-11-25    2
5          2  2020-11-25    2