Бран · продюсер «Хроник Пограничья»
В учебной выгрузке есть оплаты, возврат и незавершённая покупка. Посчитай оплаченные покупки Android от 100 рублей. Затем покажи, сколько оплат пришло с каждой платформы. Возврат не должен увеличить ни сумму, ни число оплат.
В предыдущем уроке ты собрал список словарей. Теперь научишь Python выбирать строки и повторять действие для каждой записи. Это знакомая идея WHERE, SUM и GROUP BY, только шаги ты укажешь явно.
Сначала проверка одной покупки
Начни с ячейки, которая ничего не берёт из предыдущих:
purchase = {"platform": "android", "amount_rub": 399, "status": "paid"}
print(purchase["status"] == "paid")
print(purchase["amount_rub"] >= 100)
print(purchase["platform"] == "ios")
Результат:
True
True
False
== сравнивает два значения. Не путай его с =: один знак присваивает значение имени, два знака проверяют равенство. >= означает «больше или равно».
Сравнение возвращает логическое значение, bool: True или False. Первую букву пиши заглавной, кавычки не нужны. Строка "False" была бы текстом, а не результатом сравнения.
Для чисел доступны <, <=, >, >=. Для неравенства есть !=: выражение purchase["status"] != "paid" в этой ячейке даст False.
Выполнить команду только при условии
Ещё одна отдельная ячейка, с одной покупкой:
purchase = {"amount_rub": 399, "status": "paid"}
if purchase["status"] == "paid":
print(purchase["amount_rub"])
else:
print(0)
Получишь 399. if читается как «если». После него идёт условие, затем двоеточие. Строка с отступом в четыре пробела выполняется только при True. else означает «иначе», тоже заканчивается двоеточием, но своего условия не имеет.
Отступ определяет, какие команды принадлежат ветке. В Jupyter и редакторе задач вводи четыре пробела, не смешивай пробелы с табуляцией. Если убрать отступ после if, Python сообщит IndentationError и не выполнит ячейку.
Можно различить и три состояния:
status = "refunded"
if status == "paid":
print("оплата")
elif status == "refunded":
print("возврат")
else:
print("не завершена")
Вывод: возврат. elif читается как «иначе, если». Python проверяет ветки сверху вниз и выполняет первую подходящую. Здесь первая проверка ложна, вторая истинна, до else дело не доходит.
В этом учебном примере договор о данных допускает только paid, refunded и pending. Поэтому последняя ветка обозначает pending. Для настоящей выгрузки нельзя молча считать любой неизвестный статус незавершённой покупкой: сначала узнай допустимые значения.
Соединить условия
Одна покупка должна пройти сразу три проверки:
purchase = {"platform": "android", "amount_rub": 399, "status": "paid"}
include = (
purchase["status"] == "paid"
and purchase["platform"] == "android"
and purchase["amount_rub"] >= 100
)
print(include)
Получишь True. Скобки позволяют перенести одно выражение на несколько строк. and соединяет условия по правилу «все выполнены».
Ещё две операции: or требует хотя бы одно истинное условие, not меняет True на False и наоборот. В этой ячейке обе строки дадут True:
platform = "ios"
is_refund = False
print(platform == "android" or platform == "ios")
print(not is_refund)
В SQL ты написал бы AND, OR, NOT. В Python эти слова строчные. Здесь они соединяют отдельные сравнения, каждое даёт одно логическое значение. Не переноси эту форму механически на столбцы будущей таблицы pandas: столбец содержит много значений, правила работы с ним будут другими.
урок из курса
Урок из курса «Аналитика данных с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.