Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 31.08.2021
Сообщений: 12

Сравнение текущих результатов со вчерашними

13.12.2021, 22:06. Показов 601. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Форумчане, прошу помочь со сложной для меня задачей. Есть таблица, в которой по 15-ти минутным интервалам разбиты показатели продаж (кол-во и деньги) и остатков, только за сегодня и вчера:
tsКоличествоДеньгиОстатки
12.12.2021 12:3056052721052
12.12.2021 17:1564362921191
11.12.2021 21:3061774081530
12.12.2021 21:3053867061402
11.12.2021 2:152523256574
12.12.2021 9:3056560301265
Мне надо написать цикл, который бы перебирал все показатели, брал максимальный по времени сегодняшний 15-ти минутный срез (таблица пополняется данными каждые 15 мин.) и делил на такой же 15-ти минутный срез за вчера. И в случае снижения более чем на 10% выводилось сообщение "[Название показателя] - [временной срез]. [Значение показателя в срезе]. [% отклонения]."

На примере таблицы выше: цикл должен взять из таблицы срез за 12.12.2021 21:30 и по каждому показателю разделить текущее значение среза на такие же, но за вчера 11.12.2021 21:30. И только там, где отклонение более 10 % вывести сообщение. В данном случае это должно произойти только по столбцу "Количество". Сообщение должно звучать "Количество - 12.12.2021 21:30. Текущее значение 538. Отклонение 12,8%".

Буду очень благодарен за помощь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.12.2021, 22:06
Ответы с готовыми решениями:

Сравнение текущих результатов со вчерашними
Форумчане, прошу помочь со сложной для меня задачей. Есть база данных, которая в режиме реального времени пополняется данными. Там 3...

Как сделать сравнение результатов сортировок на идентичность полученных результатов?
Здравствуйте, хотел бы узнать как можно выполнить такое странное задание просто я его не совсем понимаю, что нужно сделать с кодом чтобы...

Сравнение полученных результатов
Есть несколько лабораторий. Лаборатория , в которой все приборы исправны, оценивается в 100 баллов. Если прибор неисправен, то от 100...

4
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
13.12.2021, 23:29
asnl, можно с пандас (и сразу по всем срезам)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import pandas as pd
import numpy as np
 
df = pd.DataFrame({'ts': ['12.12.2021 12:30', '12.12.2021 17:15', 
         '11.12.2021 21:30', '12.12.2021 21:30', '11.12.2021 2:15', '12.12.2021 9:30'],
         'Количество': [560, 643, 617, 538, 252, 574],
          'Деньги': [5272, 6292, 7408, 6706, 3256, 6030],
          'Остатки': [1052, 1191, 1530, 1402, 574, 1265]})
print(df)
 
df.ts = pd.to_datetime(df.ts)
df['data'] = df.ts.dt.date.astype(str).map(lambda x: x[5:].replace('-', '.'))
df['time'] = df.ts.dt.time
df = df.drop(['ts', 'Деньги', 'Остатки'], 1)
df.set_index(['time', 'data'], drop=True, inplace=True)
 
####################
df = df.unstack(level=-1)
df['отклонение'] = np.where(df.iloc[:,1]*1.1<df.iloc[:,0],
             ((df.iloc[:,0]-df.iloc[:,1])/df.iloc[:,0]*100).round(1), np.nan)
df.dropna(inplace=True)
print(df)
####################
0
0 / 0 / 0
Регистрация: 31.08.2021
Сообщений: 12
14.12.2021, 10:12  [ТС]
Спасибо за вариант решения!
А можно как-то решить эту задачу через цикл for и оператор if?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
14.12.2021, 11:59
asnl, можно: алгоритм такой же - словарь из ключа "время события", значение - список из двух значений "количество" - первое за 11.12, второе за 12.12...

Добавлено через 35 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
a = [['12.12.2021 12:30', '12.12.2021 17:15', 
         '11.12.2021 21:30', '12.12.2021 21:30',
          '11.12.2021 2:15', '12.12.2021 9:30'],
           [560, 643, 617, 538, 252, 574],
            [5272, 6292, 7408, 6706, 3256, 6030],
             [1052, 1191, 1530, 1402, 574, 1265]]
 
fun = lambda x: int(x.split('.')[0])
dmax = max(a[0], key=fun).split()[0]
dmin = min(a[0], key=fun).split()[0]
#print(dmax)
 
a = list(map(list, zip(*a)))
#print(a)
 
res = {}
for e in a:
    k, v = e[0].split()
    if v not in res:
        res[v] = [e[1]]*2
    if k == dmax:
        res[v][1] = e[1]
    else:
        res[v][0] = e[1]        
    if res[v][1]*1.1 <= res[v][0]:
        diff = (res[v][0] - res[v][1])*100/res[v][0]
        print(f"Количество - {dmax} {v}. "
         f"Текущее значение {res[v][1]}. "
         f"Отклонение {round(diff, 1)}%.")
0
0 / 0 / 0
Регистрация: 31.08.2021
Сообщений: 12
15.12.2021, 00:13  [ТС]
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.12.2021, 00:13
Помогаю со студенческими работами здесь

Сравнение результатов из циклов
Добрый день! У меня есть коллекция, в которую вводиться содержимое файла json. В файле есть два свойства hash и url. И есть два...

Сравнение результатов функций
Добрый день, столкнулся с проблемой, требуется помощь) На сайте есть 2 блока div, я вывожу в текстовые поля какое время мышь находилась над...

Сравнение массивов и вывод результатов
Скажите пожалуйста как сделать так чтобы : У меня есть файл с числами 3 2 1 4 5 эти числа надо записать в массив Есть 2 файл содержащий...

Сравнение таблиц/результатов запросов
Подскажите, каким образом можно сравнить результаты 2-х запросов на выборку или содержание таблицы и результат запроса на выборку. Ну а...

Сравнение результатов вычисления форм
Есть две лисповские формы: expr1 и expr2. Написать функцию, которая сравнивает результаты вычисления форм и в случае эквивалентности...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru