Crosstab: канал × сегмент + margins
// Условие
У тебя таблица df — 5000 юзеров с каналом привлечения и сегментом.
Что нужно
Построй cross-tab «канал × сегмент»: в ячейках — количество юзеров. Добавь итоговую строку и столбец (параметр margins), назови их All.Итог: DataFrame 6 строк × 4 колонки (5 каналов +
All; сегменты A, B, C + All). Сохрани в result.// Данные
df:
user_id, acquisition_channel (organic/paid_search/social/referral/email), segment (A/B/C)// Решение
Подсказка
Для кросс-таблицы подсчёта есть специальная функция: pd.crosstab(df['row_col'], df['col_col']).
Добавь итоговые строку и столбец: pd.crosstab(..., margins=True, margins_name='All').
Альтернатива: df.pivot_table(index='acquisition_channel', columns='segment', values='user_id', aggfunc='count', margins=True, margins_name='All'). Оба подхода дадут одинаковый результат.
Сначала попробуй сам → Показать решение
df = load_data()
# crosstab — синтаксический сахар над pivot_table для подсчётов
result = pd.crosstab(df['acquisition_channel'], df['segment'],
margins=True, margins_name='All')
print(result)
crosstab — синтаксический сахар над pivot_table для подсчётов. margins=True добавляет итоговые строку и столбец. Если нужна не просто частота, а другая агрегация (sum/mean) — используй pivot_table: у crosstab тоже есть параметры values и aggfunc, но pivot_table универсальнее и читается понятнее.