Доли по каналам привлечения
// Условие
Таблица df — пользователи платформы с каналом привлечения.
acquisition_channel и share (float от 0 до 1, например 0.347). Сортировка по share по убыванию.В результате 5 строк. Сумма долей должна равняться 1.0 (±0.001).
// Данные
user_id, signup_date, acquisition_channel, country// Решение
Подсказка
value_counts(normalize=True) сразу даёт доли от 0 до 1 — не нужно делить на len(df) вручную.
После value_counts(normalize=True).reset_index() вторая колонка в pandas ≥ 2.0 называется proportion. Переименуй её в share.
Альтернатива без rename: df.groupby('acquisition_channel').size().div(len(df)).reset_index(name='share').sort_values('share', ascending=False).
Сначала попробуй сам → Показать решение
df = load_data()
# Доли по каналу: groupby + size + div(n)
result = (df.groupby('acquisition_channel')
.size()
.div(len(df))
.reset_index(name='share')
.sort_values('share', ascending=False)
.reset_index(drop=True))
print(result)
value_counts(normalize=True) — самый короткий путь, но в pandas ≥ 2.0 reset_index() называет вторую колонку proportion, не share — не забудь переименовать. Альтернатива через groupby+size+div явнее: сразу понятно откуда берутся числа. На собесе стоит проверить, что сумма долей равна 1 — простой sanity-check перед тем как показывать результат.