Pandas CategoricalDtype: сортировка категорий и отчёт
Лексикографическая сортировка строк не обязана совпадать с деловым порядком категорий. Для уровней «низкий», «средний», «высокий» можно явно задать упорядоченный категориальный тип.
Проверьте состав категорий до преобразования: неизвестное значение может превратиться в пропуск. В этой задаче порядок уровней используется вместе с фильтрацией и расчётом показателя — все требования приведены в спецификации.
Проверьте решение без регистрации. Объяснения и последовательная практика — в курсе «NumPy и pandas: практический тренажёр».
Отчёт по уровням: категориальная сортировка, фильтрация и среднее
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая строит отчёт по сотрудникам с категориальной сортировкой.
- Читает из
stdinцелое числоn— количество строк. - Читает следующие
nстрок; каждая содержит три токена через пробел:name(строка без пробелов),level(одно из словjunior,middle,senior) иsalary(целое число). Пример строки:Аня junior 60000. - Строит
pd.DataFrameс именемdfиз словаря списков с ключами'name','level','salary'. - Шаг A. Категориальный тип. Создаёт объект
cat_dtype = pd.CategoricalDtype(categories=['junior', 'middle', 'senior'], ordered=True)и присваивает его столбцу'level'черезastype, сохраняя результат обратно вdf['level']. - Шаг B. Сортировка. Сортирует
dfпо'level'черезdf.sort_values('level')и сохраняет вdf_sorted. Выводит значения столбца'name'изdf_sortedчерез пробел в одну строку. - Шаг C. Фильтрация. Из
df_sortedотбирает строки, гдеlevelне равен'junior', черезdf_sorted.loc[df_sorted['level'] != 'junior']. Сохраняет вdf_senior. Выводитdf_senior.shape[0]— количество оставшихся строк. - Шаг D. Среднее. Вычисляет среднее значение
'salary'дляdf_seniorчерез.mean()и выводит его, округлив до двух знаков после запятой. - Шаг E. Проверка dtype. Выводит
str(df['level'].dtype)— должно бытьcategory.
Ввод и вывод
Программа читает stdin и пишет в stdout.
Формат ввода
n name1 level1 salary1 name2 level2 salary2 ...
Дополнительные ограничения: n >= 1; среди строк есть хотя бы один сотрудник уровня middle или senior.
Формат вывода
Четыре строки:
<имена через пробел в порядке категориальной сортировки>
<количество строк df_senior>
<среднее salary df_senior, округлённое до 2 знаков>
<dtype столбца level>
Пример
- Ввод
6 Аня junior 60000 Боря senior 120000 Вера middle 85000 Гена junior 55000 Даша senior 130000 Егор middle 90000
- Вывод
Аня Гена Вера Егор Боря Даша 4 106250.0 category
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Категориальные столбцы: CategoricalDtype и упорядоченная сортировка — задача по NumPy и pandas
- pandas CategoricalDtype: сортировка категорий и строк
- pandas CategoricalDtype: почему astype заменяет значения на NaN
- pandas Series из словаря: index, shape и dtype
- pandas DataFrame из списка словарей: пример и задача
- Загрузка CSV с явными типами и датами через readcsv — задача по NumPy и pandas
