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

Создать таблицу по условию

07.03.2022, 21:08. Показов 2311. Ответов 7

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста с созданием таблицы.
Существует таблицы, содержащая в себе данные : id- номер пользователя, FirstVisit - дата первого визита, LastVisit - дата последнего визита.
Необходимо создать таблицу с полями: Month - месяц, MAU- количество уникальных пользователей.

Я пока создал список месяцев, через минимальную и максимальную дату в таблице.
Python
1
df=pd.date_range(visit.FirstVisit.min(),visit.LastVisit.max()).strftime('%Y-%m')
B придумал примерный способ как посчитать MAU, это - Количество уникальных id, у которых FirstVisit<=Month, и LastVisit>=Month. Но реализовать это не получается. Пробовал через функцию, но пока не выходит, помогите пожалуйста.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.03.2022, 21:08
Ответы с готовыми решениями:

Создать таблицу из данных иных таблиц по условию
Здравствуйте. Помогите, пожалуйста с запросом. Попробую описать: есть 2 таблицы T1 A F AVal1 FVal1 AVal2 FVal2 ...

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

Задано линейную таблицу X. Переписать из него в таблицу В элементы, соответствующие заданному условию: а) начи
Задано линейную таблицу X. Переписать из него в таблицу В элементы, соответствующие заданному условию: а) начиная со второго с шагом 3; ...

7
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
07.03.2022, 23:09
Ace23000, таблиц нет. Посмотри:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
import pandas as pd
import numpy as np
 
df = pd.DataFrame({'id': [1,2,3,1,2,3,1,2,3], 
              'A': np.random.randint(1,12,9),
              'B': np.random.randint(1,12,9)})
print(df)
 
df1 = pd.DataFrame({'Month': np.arange(1,13)})
 
fun = lambda m: np.where((df.A <= m) & (df.B >= m), df.id, 0)
df1['cnt'] = df1.Month.map(lambda x: np.count_nonzero(np.unique(fun(x))))
print(df1)
0
0 / 0 / 0
Регистрация: 26.05.2014
Сообщений: 96
08.03.2022, 21:47  [ТС]
Попробовал так, не получилось, не правильно считает суммы по промежуткам, закономерность к сожалению не обнаружил.

+ немного исправил создание фрейма, для первого столбца:

Python
1
df=pd.DataFrame(pd.date_range(visit.FirstVisit.min(),visit.LastVisit.max(), freq='M').strftime('%Y-%m'),columns=['Month'])
Добавлено через 22 минуты
Может нужно обратить внимание на то, что у пользователя, FirstVisit и LastVisit всегда одинаковая, но запись может повторяться, т.к пропущены столбцы. Т.е по факту дубли можно удалить и считать просто количество записей.
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
08.03.2022, 22:00
Лучший ответ Сообщение было отмечено Ace23000 как решение

Решение

Ace23000,
закономерность к сожалению не обнаружил.
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
import pandas as pd
import numpy as np
 
df = pd.DataFrame({'id': [1,2,3,1,2,3,1,2,3], 
              'A': np.random.randint(1,12,9),
              'B': np.random.randint(1,12,9)})
print(df)
 
df1 = pd.DataFrame({'Month': np.arange(1,13)})
 
# функция - возвращает по условию
# ,        (df.A <= m) & (df.B >= m)
#         df.A - столбец месяца первого визита
#         df.B - последнего визита
#         'm' - значение в столбце df1['Month']
# если попадает во временной промежуток - 'id'
# и 0, если нет
# работает для всего "'df' и каждой строки df1
 
fun = lambda m: np.where((df.A <= m) & (df.B >= m), df.id, 0)
 
# считает в начале уникальные значения,
# полученные в функции выше
# (все 'id' и 0 при заданном 'm'),
# затем считает количество
# уникальных значений, исключая 0
df1['cnt'] = df1.Month.map(lambda x: np.count_nonzero(np.unique(fun(x))))
print(df1)
1
0 / 0 / 0
Регистрация: 26.05.2014
Сообщений: 96
09.03.2022, 14:22  [ТС]
Да, получилось, спасибо. Сначала не увидел, что если учитывать id пользователя, то все правильно считает.
Только вот остался вопрос, как добавить в эту таблицу еще поле с месяцем первого визита (FirstVisit).
То есть должна выполняться таже функция, только с добавлением группировке по месяцу первого визита.

Скорее всего, нужно делать через цикл, вначале создать пустой датафрейм и дальше по строке его заполнять.
Попробовал сделать, но ругается даже на сопоставление с месяцем, можете подсказать как сделать:

Python
1
2
3
4
5
6
7
for i in (pd.date_range(visit.FirstVisit.min(),visit.FirstVisit.max(),freq='M').strftime('%Y-%m')):
 
    for m in (pd.date_range(visit.FirstVisit.min(),visit.LastVisit.max(),freq='M').strftime('%Y-%m')):
 
        if (visit.FirstVisit.strftime('%Y-%m') = i) & (visit.FirstVisit<=m) & (visit.LastVisit >= m) :
 
            df1=df1.append({'FirstVisit:' i,'Months': m,'cnt'= df1.Month.map(lambda x:np.count_nonzero(np.unique(fun(x))))})
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
09.03.2022, 15:16
Ace23000, нужны реальные таблицы (хотя бы с минимумом строк и колонок):
*- "такая" на входе
*- нужно получить "вот такую", используя "вот твкое" условие
Причина - в pandas очень часто возникают проблемы с временными (дата) рядами (столбцами или строками).
0
0 / 0 / 0
Регистрация: 26.05.2014
Сообщений: 96
09.03.2022, 16:43  [ТС]
Сразу скажу что у всех дат тип datetime64
Вот пример на входе :
idFirstVisitLastVisit
103.02.202110.10.2021
210.02.202112.12.2021
315.01.202101.02.2022
414.05.202104.03.2022
512.05.202115.05.2021
103.02.202110.10.2021
315.01.202101.02.2022

Вот результирующая таблица, группируется по FirstVisit, и считает количество пользователей:
FirstVisitMonthcnt
2021.012021.011
2021.012021.021
2021.012021.031
2021.012021.041
2021.012021.051
2021.012021.061
2021.012021.071
2021.012021.081
2021.012021.091
2021.012021.101
2021.012021.111
2021.012021.121
2021.012022.011
2021.012022.021
2021.022021.022
2021.022021.032
2021.022021.042
2021.022021.052
2021.022021.062
2021.022021.072
2021.022021.082
2021.022021.092
2021.022021.102
2021.022021.111
2021.022021.121
2021.052021.052
2021.052021.061
2021.052021.071
2021.052021.081
2021.052021.091
2021.052021.101
2021.052021.111
2021.052021.121
2021.052022.011
2021.052022.021
2021.052022.031
0
0 / 0 / 0
Регистрация: 26.05.2014
Сообщений: 96
12.03.2022, 20:52  [ТС]
Нашел, ошибки в цикле, но пока все равно не получается.
Python
1
2
3
4
5
6
7
for i in (pd.date_range(visit.FirstVisit.min(),visit.FirstVisit.max(),freq='M').strftime('%Y-%m')):
 
    for m in (pd.date_range(visit.FirstVisit.min(),visit.LastVisit.max(),freq='M').strftime('%Y-%m')):
 
        if (pd.to_datetime(visit.FirstVisit, format ='%Y-%m')==i) & (visit.FirstVisit<=m) & (visit.LastVisit >= m) :
 
            df1=df1.append({'FirstVisit': i,'Months': m,'cnt': df1.Month.map(lambda x:np.count_nonzero(np.unique(fun(x))))})
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.03.2022, 20:52
Помогаю со студенческими работами здесь

Создать таблицу БД, создать БД и поместить в неё ранее созданную таблицу
создать тадлицу БД,создание БД и помещение в неё ранее созданную таблицу(с помощъю CREAT)

Создать таблицу Person (id, name, gender), в которой id является первичным ключом. Создать таблицу Food (id, food,
id_Person), где id_Person является внешним ключом. Заполнить. Вывести на экран всю информацию из двух таблиц.

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

Разделить таблицу по условию
Помогите, пожалуйста, доделать или переделать Selection.Find.ClearFormatting With Selection.Find .Text =...

Сформировать таблицу по заданному условию.
Разработать программу, в которой по заданным целым числом N (2 ≤ N &lt;99) формируется таблица с N строк и N столбцов следующей структуры ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru