🍀 Как мне помогла теория вероятности.
Прислали мне тут вот такую задачку – отобрать всех клиентов, у которых нет заявок на определенный доп.функционал или тех, у кого заявку одобрили, но клиент пока отключил у себя эту опцию. И еще у них среднемесячная выручка с начала 2022 года должна быть больше 800 тыс. руб.
Сначала я нашла тех, у кого больше 800 тыс.руб. в мес. - df_more_800
А вот потом в мозгу у меня все смешалось – что с чем соединить? 😜 И тут я составила табличку вероятностного пространства всех возможных вариантов, чтобы наглядно понять, как вытащить данные.
Получилась вот такая таблица:
| Есть заявка| Одобрена | Клиент включил опцию у себя |
| Есть заявка| Одобрена | Клиент НЕ включил опцию у себя |
| Есть заявка| НЕ одобрена| - |
| НЕТ заявки | - | - |
Сначала ищу клиентов, кто вообще подал заявку.
query = f"""
select account_id
from sales.request
where account_id in {tuple(df_more_800['account_id'])}
"""
df_request = pd.read_sql(query, connection)
Потом я нашла аккаунты тех клиентов, кто не включил опцию:
query = f"""
select account_id
from sales.request
where account_id in {tuple(df_more_800['account_id'])}
and status = 1 -- одобренность заявки
and active = 0 -- клиент отключил у себя
"""
df_off = pd.read_sql(query, connection)
Исключим с помощью isin те школы, кот подавали заявку, чтобы оставить тех, кто НЕ ПОДАВАЛ ЗАЯВКУ . Вот этот знак (~) оставляет в df_more_800 все, кроме тех аккаунтов, что указаны в df_request
df_wo_application = df_more_800[~df_more_800['account_id'].isin(tuple(df_request['account_id']))]
А теперь объединим с помощью concat тех, кто не подавал заявку и тех, кто выключил у себя эту опцию. Это и будет финалочка! 👌
df_final = pd.concat([df_wo_application, df_off], ignore_index = True)
Обсуждение 0
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram