Короткий ответ
value_counts() — это быстрый способ посчитать частоты значений одного Series с сортировкой по убыванию по умолчанию, а groupby(...).size() — более общий инструмент, который можно использовать при группировке по нескольким столбцам сразу.
Как это работает подробнее
df['col'].value_counts() считает, сколько раз встречается каждое уникальное значение в столбце, и по умолчанию исключает NaN (есть параметр dropna=False, чтобы включить); groupby(['col1','col2']).size() считает количество строк в каждой комбинации значений нескольких столбцов.
Пример кода
Пример Python
import pandas as pd
df = pd.DataFrame({'country': ['RU', 'RU', 'US', None], 'status': ['paid', 'paid', 'paid', 'paid']})
print(df['country'].value_counts()) # RU: 2, US: 1 (без NaN)
print(df.groupby('country').size()) # аналогично, NaN исключёнЧто использовать на практике
- На практике: value_counts() удобен для быстрого взгляда на распределение одной категориальной переменной, а groupby+size — когда нужно посчитать количество по пересечению нескольких признаков (например, количество заказов по стране и статусу одновременно).
- Проверка: сумма value_counts() равна 3, хотя всего в таблице 4 строки — разница в 1 указывает на пропуск, который не попал в подсчёт.
Подводные камни
- Частые ошибки: используют value_counts() и забывают, что по умолчанию пропуски не считаются, из-за чего сумма частот меньше общего числа строк; путают size() и count() в groupby — size() считает число строк независимо от пропусков в конкретном столбце, а count() считает непустые значения по каждому столбцу отдельно, и для столбцов с пропусками результаты будут отличаться.