Pandas: фильтрация заказов и группировка по диапазонам выручки

Данные orderslog находятся в DataFrame df.

Короткий ответ

Что ответить на собеседовании

Данные orderslog находятся в DataFrame df.

Подробный разбор

Ответ с пояснениями

Условие

Данные orders_log находятся в DataFrame df.

  1. Вывести строки, где статус processing, выручка revenue > 50000 и приоритет high.
  2. Создать revenue_group: Small при выручке < 50000, Medium при 50000 ≤ выручка < 90000, Large при выручке ≥ 90000. Посчитать число заказов по Category и группе выручки.

Решение

Предполагается, что выручка уже числовая, а статус хранится в state, как в исходном примере.

mask = (
    (df["state"] == "processing")
    & (df["revenue"] > 50000)
    & (df["priority"] == "high")
)
print(df.loc[mask.fillna(False)])

# Вторая задача использует исходный df, а не отфильтрованные строки.
df["revenue_group"] = "Unknown"
revenue = df["revenue"]
df.loc[(revenue < 50000).fillna(False), "revenue_group"] = "Small"
df.loc[
    ((revenue >= 50000) & (revenue < 90000)).fillna(False),
    "revenue_group",
] = "Medium"
df.loc[(revenue >= 90000).fillna(False), "revenue_group"] = "Large"

result = (
    df.groupby(["Category", "revenue_group"], observed=True, dropna=False)
      .size()
      .reset_index(name="order_count")
)
print(result)

size() считает строки, включая заказы с пропусками в других полях. Неизвестная выручка остаётся в отдельной группе Unknown; dropna=False сохраняет и заказы без категории. Граничные значения 50000 и 90000 относятся соответственно к Medium и Large.

Группировка в pandas.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку