Series.value_counts() возвращает частоту каждого уникального значения, отсортированную по убыванию. С normalize=True считает доли вместо абсолютных чисел. Это самый быстрый способ у аналитика посмотреть распределение категориальной переменной — топ каналов, доли статусов, частотность значений.
По умолчанию value_counts пропускает NaN — чтобы увидеть долю пропусков, ставь dropna=False. Результат отсортирован по частоте, а не по значению; для сортировки по значению добавь .sort_index(). Для непрерывных данных есть bins=N — разобьёт на интервалы (аналог гистограммы). value_counts работает на Series, для нескольких колонок в новых версиях — df.value_counts().
Где спрашивают на собеседовании
value_counts — первое, что делают при разведочном анализе категориальной колонки. На собеседовании спрашивают, как быстро получить распределение и доли, и помнишь ли про dropna=False для учёта пропусков.
FAQ: частые вопросы про value_counts
Как получить доли вместо количества в value_counts?
Передай normalize=True: df['col'].value_counts(normalize=True) вернёт долю каждого значения (в сумме 1). Умножь на 100 для процентов.
Учитывает ли value_counts значения NaN?
По умолчанию нет — NaN пропускаются. Чтобы увидеть частоту пропусков, добавь dropna=False.
Чем value_counts отличается от groupby().size()?
Результат тот же (частоты), но value_counts сразу сортирует по убыванию и умеет normalize и bins. groupby().size() удобнее, когда частота — часть более сложной агрегации.