Код Middle Производительность и память обновлено

Ужать DataFrame: category и downcast

Условие

Дан список строк [city, qty] (городов мало, qty целые). Постройте DataFrame, переведите city в category, qty в минимальный знаковый целый тип через pd.to_numeric(..., downcast="integer"). Верните {"city": имя dtype city, "qty": имя dtype qty, "smaller": стала ли таблица меньше по memory_usage(deep=True)}.

Примеры

shrink([["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2], ["Москва", 1], ["Казань", 2]]) // {"city":"category","qty":"int8","smaller":true}
shrink([["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1], ["A", 300], ["B", 1]]) // {"city":"category","qty":"int16","smaller":true}
shrink([["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1], ["A", 70000], ["A", 1]]) // {"city":"category","qty":"int32","smaller":true}

Как подойти

Подсказки: 3
  1. astype("category")
  2. pd.to_numeric(s, downcast="integer")
  3. str(df[col].dtype) даёт имя типа.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.