isna/isnull дают маску; sum(), mean() по маске — счётчики и доли; notna — обратная маска для фильтрации полных строк/ячеек.
Разбор
dropna(how/subset/thresh) удаляет строки или столбцы.
- Пустая строка
"" ≠ NaN, пока не замапите na_values.
- В groupby NaN в ключе по умолчанию исключается (зависит от версии/настроек).
- Смотрите паттерн пропусков, не только count.
Итог
Сначала измерьте NA, затем решайте drop/impute/оставить nullable.