📊 ⚡️Хитрая задачка с работы. Возвращение. 📊 👨💻Наконец удалось выкроить время, чтобы поэкспериментировать с этой хитрой задачей, и теперь у меня есть решение, которое не использует циклы! Всё сделано исключительно с помощью Pandas! Давайте разберем его пошагово: 1️⃣Генерация данных как и в прошлый раз💾 Здесь мы создаем список словарей, где каждый словарь содержит client_id и строку value с информацией о рассрочках. import pandas as pd data = [ { 'client_id': 111, 'value': 'installment_0_0_3_7,59 Срок рассрочки 3 мес.' 'installment_0_0_4_8,42 Срок рассрочки 4 мес.' 'installment_0_0_6_10,84 Срок рассрочки 6 мес.' }, { 'client_id': 222, 'value': 'installment_0_0_3_4,93 Срок рассрочки 3 мес.' }, { 'client_id': 333, 'value': 'installment_0_0_4_5,64 Срок рассрочки 4 мес.' 'installment_0_0_6_6,05 Срок рассрочки 6 мес.' }, { 'client_id': 444, 'value': 'installment_0_0_3_7,78 Срок рассрочки 3 мес.' 'installment_0_0_6_9,60 Срок рассрочки 6 мес.' }, { 'client_id': 555, 'value': 'installment_0_0_4_8,57 Срок рассрочки 4 мес.' 'installment_0_0_6_8 Срок рассрочки 6 мес.' } ] df = pd.DataFrame(data) 2️⃣Извлечение данных (сроков рассрочки и ставок из строки value) с использованием регулярного выражения 🔍 extracted = df.set_index('client_id')['value'].str.extractall(r'installment_0_0_(\d+)_([\d,]+)') extracted = extracted.reset_index(level=1, drop=True).reset_index() extracted.columns = ['client_id', 'term', 'rate'] 3️⃣ Преобразование данных в нужный формат 🔄 Преобразуем строковые значения в числовой формат и добавляем текстовое описание к срокам рассрочки. extracted['rate'] = extracted['rate'].str.replace(',', '.').astype(float) extracted['term'] = 'Срок рассрочки ' + extracted['term'] + ' мес.' 4️⃣Определение условий фильтрации 🕵️♂️ Задаем условия для фильтрации данных по срокам рассрочки и максимальным допустимым ставкам. conditions = { "Срок рассрочки 3 мес.": 5.93, "Срок рассрочки 4 мес.": 6.64, "Срок рассрочки 6 мес.": 7.05 } 5️⃣Фильтрация данных 📊 filtered_df = extracted[extracted.apply( lambda row: row['term'] in conditions and row['rate'] <= conditions[row['term']], axis=1 )] 📎 Вот ссылка на обновленный Jupyter Notebook. В нём вы найдёте ещё дополнительные варианты решения, которые прислал Дмитрий в комментариях. Спасибо ему за это! 🙂
8 месяцев назад