Развернуть длинную таблицу событий в широкую матрицу когорт — pivot или melt?
df длинный: cohort_month, activity_month, users, одна строка на ячейку. Разверните его в широкую матрицу с индексом cohort_month и одним столбцом на activity_month со значениями users.
import pandas as pd
def cohort_matrix(df: pd.DataFrame) -> pd.DataFrame:
# ваш код здесь
Напишите реализацию.
pivot разворачивает длинное в широкое: df.pivot(index='cohort_month', columns='activity_month', values='users'). melt — обратное, широкое в длинное. pivot годится, только если пара индекс/столбец уникальна; если ячейка может повторяться, pivot_table(..., aggfunc='sum') агрегирует коллизии.
- ✗Путать pivot и melt — брать melt для расширения фрейма
- ✗Звать pivot при повторах пар индекс/столбец и ловить ValueError
- ✗Считать, что pivot агрегирует дубликаты, как pivot_table
- →Когда обязательно переходить с pivot на pivot_table?
- →Как melt называет свои столбцы value и variable?
pivot разворачивает длинные строки в матрицу: cohort_month становится индексом, activity_month — столбцами, users заполняет ячейки.
import pandas as pd
def cohort_matrix(df: pd.DataFrame) -> pd.DataFrame:
return df.pivot(index='cohort_month',
columns='activity_month',
values='users')
melt — обратный путь в длинную форму. pivot падает на повторяющейся паре индекс/столбец — переходят на pivot_table(index=..., columns=..., values='users', aggfunc='sum'), когда ячейка законно содержит несколько строк.