Advertisement
Korotkodul

Databases

Apr 17th, 2025 (edited)
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.34 KB | None | 0 0
  1. # Загрузка датасета с помощью kagglehub
  2. import os
  3. import pandas as pd
  4. import kagglehub
  5.  
  6. # Загрузка последней версии датасета
  7. path = kagglehub.dataset_download("ersany/online-retail-dataset")
  8. print("Path to dataset files:", path)
  9.  
  10. # Чтение Excel-файла
  11. df = pd.read_excel(os.path.join(path, "Online Retail.xlsx"))
  12. """
  13.  InvoiceNo StockCode  ... CustomerID         Country
  14. 0    536365    85123A  ...    17850.0  United Kingdom
  15. 1    536365     71053  ...    17850.0  United Kingdom
  16. 2    536365    84406B  ...    17850.0  United Kingdom
  17. 3    536365    84029G  ...    17850.0  United Kingdom
  18. 4    536365    84029E  ...    17850.0  United Kingdom
  19.  
  20. [5 rows x 8 columns]
  21.  
  22. ['InvoiceNo', 'StockCode', 'Description', 'Quantity', 'InvoiceDate', 'UnitPrice', 'CustomerID', 'Country']
  23. """
  24.  
  25. """
  26. Изменяем цены
  27. объединить страны в группы по первой букве страны (Australia, Austria; Belgium, Brazil и тд)
  28. В группе с первой буквой "A" поднять цену на максимальную цену товарав группе
  29. В группе с первой буквой "B" цену уменьшить на половину минимальной
  30. В остальных группах цены увеличить на 10% от текущей цены объекта
  31. """
  32. # Полная настройка отображения DataFrame
  33. pd.set_option('display.max_columns', None)  # Все колонки
  34. pd.set_option('display.expand_frame_repr', False)  # Не переносить на новую строку
  35. pd.set_option('display.width', 1000)  # Ширина вывода
  36. pd.set_option('display.max_colwidth', 20)  # Максимальная ширина колонки
  37.  
  38. #объединить страны в группы по первой букве страны (Australia, Austria; Belgium, Brazil и тд)
  39. print("RAW")
  40. print(df.columns.tolist())  # Вывод списка колонок
  41. print(df.head())
  42.  
  43.  
  44. def change_price(group):
  45.     """Функция для изменения цен в соответствии с условиями"""
  46.     first_letter = group.name  # Здесь group.name - это первая буква (A, B и т.д.)
  47.  
  48.     if first_letter == 'A':
  49.         # Для группы A: цена = максимальная цена в группе
  50.         max_price = group['UnitPrice'].max()
  51.         group['UnitPrice'] = max_price
  52.     elif first_letter == 'B':
  53.         # Для группы B: цена = текущая цена - половина минимальной цены группы
  54.         min_price = group['UnitPrice'].min()
  55.         group['UnitPrice'] = group['UnitPrice'] - (min_price / 2)
  56.     else:
  57.         # Для остальных групп: увеличиваем цену на 10%
  58.         group['UnitPrice'] = group['UnitPrice'] * 1.10
  59.  
  60.     return group
  61.  
  62.  
  63. def task1(df):
  64.     """Основная функция для обработки данных"""
  65.     # Добавляем столбец с первой буквой страны
  66.     df['FirstLetter'] = df['Country'].str[0]
  67.  
  68.     # Группируем по первой букве и применяем модификацию цен
  69.     df = df.groupby('FirstLetter', group_keys=False).apply(change_price)
  70.  
  71.     return df
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement