Untitled

mail@pastecode.io avatar
unknown
plain_text
2 months ago
2.4 kB
1
Indexable
Never
# Повторная настройка окружения после сброса состояния выполнения кода.
import pandas as pd
from datetime import datetime

# Создание имитации исходных данных для демонстрации решения.
# Определение схемы данных
data = {
    "transaction_date": pd.date_range(start="2023-01-01", periods=6, freq='M'),
    "label": ["dil_MO+KP", "dil_MO+KP", "dil_MO", "dil_KP", "Прочие", "dil_MO+KP"],
    "client_inn_dil": ["client1", "client2", "client3", "client4", "client5", "client1"]
}

# Создание DataFrame
df = pd.DataFrame(data)

# Имитация данных для после "2023-06-01"
data_post_june = {
    "transaction_date": pd.date_range(start="2023-07-01", periods=3, freq='M'),
    "label": ["dil_MO", "dil_KP", "Прочие"],
    "client_inn_dil": ["client1", "client3", "client2"]
}

df_post_june = pd.DataFrame(data_post_june)

# Объединение датасетов для полного представления
df = pd.concat([df, df_post_june])

# Фильтрация клиентов, которые были в кластере 'dil_MO+KP' до '2023-06-01'
clients_pre_june = df[(df['label'] == 'dil_MO+KP') & (df['transaction_date'] < '2023-06-01')]

# Получение уникальных клиентов в этом кластере до '2023-06-01'
unique_clients_pre_june = clients_pre_june['client_inn_dil'].unique()

# Фильтрация транзакций после '2023-06-01'
transactions_post_june = df[df['transaction_date'] > '2023-06-01']

# Проверка, какие из уникальных клиентов до '2023-06-01' продолжали совершать транзакции после этой даты
active_clients_post_june = transactions_post_june[transactions_post_june['client_inn_dil'].isin(unique_clients_pre_june)]['client_inn_dil'].unique()

# Определение клиентов, которые ушли (те, кто был до '2023-06-01', но не совершал транзакции после)
left_clients = set(unique_clients_pre_june) - set(active_clients_post_june)

# Возвращаем количество клиентов, которые ушли
len(left_clients), len(unique_clients_pre_june), len(active_clients_post_june)
Leave a Comment