У меня есть набор данных со столбцом групп, дат, дня недели и некоторыми столбцами данных. Для каждой даты в каждой группе я хочу вычислить среднее значение за один и тот же день за последние 3 недели. Я ломал голову, пытаясь понять, как лучше всего это сделать, тем более что некоторые даты могут отсутствовать, поэтому группировка по группе и дню недели и использование прокручивания последних трех строк для получения среднего значения не всегда могут быть правильными. Как мне это сделать правильно?
У меня есть MRE примеров данных и выходных столбцов, поэтому достаточно долго, чтобы полностью продемонстрировать то, что мне нужно:
import numpy as np
import pandas as pd
df = pd.DataFrame({
'Group': [
'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 2', 'Group 1', 'Group 1', 'Group 2',
'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 1', 'Group 2',
'Group 2', 'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 1',
'Group 2', 'Group 1', 'Group 2', 'Group 2', 'Group 1', 'Group 2', 'Group 1', 'Group 2',
'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 2', 'Group 1',
'Group 2', 'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 1',
'Group 2'],
'Date': [
'2025-06-26 00:00:00', '2025-06-26 00:00:00', '2025-06-27 00:00:00', '2025-06-27 00:00:00',
'2025-06-28 00:00:00', '2025-06-29 00:00:00', '2025-06-30 00:00:00', '2025-06-30 00:00:00',
'2025-07-01 00:00:00', '2025-07-01 00:00:00', '2025-07-02 00:00:00', '2025-07-02 00:00:00',
'2025-07-03 00:00:00', '2025-07-03 00:00:00', '2025-07-04 00:00:00', '2025-07-04 00:00:00',
'2025-07-05 00:00:00', '2025-07-07 00:00:00', '2025-07-07 00:00:00', '2025-07-08 00:00:00',
'2025-07-08 00:00:00', '2025-07-09 00:00:00', '2025-07-09 00:00:00', '2025-07-10 00:00:00',
'2025-07-10 00:00:00', '2025-07-11 00:00:00', '2025-07-11 00:00:00', '2025-07-12 00:00:00',
'2025-07-14 00:00:00', '2025-07-14 00:00:00', '2025-07-15 00:00:00', '2025-07-15 00:00:00',
'2025-07-16 00:00:00', '2025-07-16 00:00:00', '2025-07-17 00:00:00', '2025-07-17 00:00:00',
'2025-07-18 00:00:00', '2025-07-18 00:00:00', '2025-07-19 00:00:00', '2025-07-21 00:00:00',
'2025-07-21 00:00:00', '2025-07-22 00:00:00', '2025-07-22 00:00:00', '2025-07-23 00:00:00',
'2025-07-23 00:00:00', '2025-07-24 00:00:00', '2025-07-24 00:00:00', '2025-07-25 00:00:00',
'2025-07-25 00:00:00'],
'Weekday': [
3, 3, 4, 4, 5, 6, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 0, 0,
1, 1, 2, 2, 3, 3, 4, 4, 5, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4],
'Data 1': [
69, 33, 42, 38, 7, 1, 60, 37, 45, 31, 66, 30, 61, 29, 36, 41, 9, 27, 44, 29, 34, 46, 36,
55, 34, 29, 40, 8, 62, 49, 26, 30, 51, 31, 57, 36, 40, 49, 11, 65, 37, 50, 34, 38, 35, 70,
25, 27, 42],
'Data 2': [
7, 8, 4, 9, 3, 0, 6, 5, 3, 3, 11, 6, 10, 1, 6, 4, 0, 1, 6, 6, 5, 4, 2, 7, 1, 4, 5, 1, 3, 4,
0, 6, 4, 1, 7, 1, 8, 7, 0, 4, 9, 4, 4, 3, 2, 1, 5, 4, 7],
'Data 1 L4W Av': [
np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,
np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 51.33, 63.33, 39.667, 41.0, 25.33, 27.33,
47.33, 55.0, 33.667, 38.33, 39.33, 53.33, 37.33, 33.0, 29.0, 17.667, 31.667, 42.33, 43.667,
34.667, 29.33, 41.667, 46.667, 51.667, 36.667, 33.33, 34.667, 34.0, 33.0, 52.0, 34.667, 33.33],
'Data 2 L4W Av': [
np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,
np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 8.0, 7.667, 6.0, 4.33, 3.6667, 4.667,
7.0, 7.33, 4.667, 4.667, 3.6667, 7.667, 4.667, 5.0, 3.6667, 1.0, 3.0, 3.6667, 4.0, 5.33,
5.33, 4.667, 4.0, 4.0, 6.33, 3.0, 1.33, 3.0, 3.33, 6.33, 6.0, 4.0]})
Подробнее здесь: https://stackoverflow.com/questions/798 ... -in-groups
Панды живут в группах в среднем 3 недели в один и тот же день ⇐ Python
Программы на Python
-
Anonymous
1767300285
Anonymous
У меня есть набор данных со столбцом групп, дат, дня недели и некоторыми столбцами данных. Для каждой даты в каждой группе я хочу вычислить среднее значение за один и тот же день за последние 3 недели. Я ломал голову, пытаясь понять, как лучше всего это сделать, тем более что некоторые даты могут отсутствовать, поэтому группировка по группе и дню недели и использование прокручивания последних трех строк для получения среднего значения не всегда могут быть правильными. Как мне это сделать правильно?
У меня есть MRE примеров данных и выходных столбцов, поэтому достаточно долго, чтобы полностью продемонстрировать то, что мне нужно:
import numpy as np
import pandas as pd
df = pd.DataFrame({
'Group': [
'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 2', 'Group 1', 'Group 1', 'Group 2',
'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 1', 'Group 2',
'Group 2', 'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 1',
'Group 2', 'Group 1', 'Group 2', 'Group 2', 'Group 1', 'Group 2', 'Group 1', 'Group 2',
'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 2', 'Group 1',
'Group 2', 'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 1', 'Group 2', 'Group 1',
'Group 2'],
'Date': [
'2025-06-26 00:00:00', '2025-06-26 00:00:00', '2025-06-27 00:00:00', '2025-06-27 00:00:00',
'2025-06-28 00:00:00', '2025-06-29 00:00:00', '2025-06-30 00:00:00', '2025-06-30 00:00:00',
'2025-07-01 00:00:00', '2025-07-01 00:00:00', '2025-07-02 00:00:00', '2025-07-02 00:00:00',
'2025-07-03 00:00:00', '2025-07-03 00:00:00', '2025-07-04 00:00:00', '2025-07-04 00:00:00',
'2025-07-05 00:00:00', '2025-07-07 00:00:00', '2025-07-07 00:00:00', '2025-07-08 00:00:00',
'2025-07-08 00:00:00', '2025-07-09 00:00:00', '2025-07-09 00:00:00', '2025-07-10 00:00:00',
'2025-07-10 00:00:00', '2025-07-11 00:00:00', '2025-07-11 00:00:00', '2025-07-12 00:00:00',
'2025-07-14 00:00:00', '2025-07-14 00:00:00', '2025-07-15 00:00:00', '2025-07-15 00:00:00',
'2025-07-16 00:00:00', '2025-07-16 00:00:00', '2025-07-17 00:00:00', '2025-07-17 00:00:00',
'2025-07-18 00:00:00', '2025-07-18 00:00:00', '2025-07-19 00:00:00', '2025-07-21 00:00:00',
'2025-07-21 00:00:00', '2025-07-22 00:00:00', '2025-07-22 00:00:00', '2025-07-23 00:00:00',
'2025-07-23 00:00:00', '2025-07-24 00:00:00', '2025-07-24 00:00:00', '2025-07-25 00:00:00',
'2025-07-25 00:00:00'],
'Weekday': [
3, 3, 4, 4, 5, 6, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 0, 0,
1, 1, 2, 2, 3, 3, 4, 4, 5, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4],
'Data 1': [
69, 33, 42, 38, 7, 1, 60, 37, 45, 31, 66, 30, 61, 29, 36, 41, 9, 27, 44, 29, 34, 46, 36,
55, 34, 29, 40, 8, 62, 49, 26, 30, 51, 31, 57, 36, 40, 49, 11, 65, 37, 50, 34, 38, 35, 70,
25, 27, 42],
'Data 2': [
7, 8, 4, 9, 3, 0, 6, 5, 3, 3, 11, 6, 10, 1, 6, 4, 0, 1, 6, 6, 5, 4, 2, 7, 1, 4, 5, 1, 3, 4,
0, 6, 4, 1, 7, 1, 8, 7, 0, 4, 9, 4, 4, 3, 2, 1, 5, 4, 7],
'Data 1 L4W Av': [
np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,
np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 51.33, 63.33, 39.667, 41.0, 25.33, 27.33,
47.33, 55.0, 33.667, 38.33, 39.33, 53.33, 37.33, 33.0, 29.0, 17.667, 31.667, 42.33, 43.667,
34.667, 29.33, 41.667, 46.667, 51.667, 36.667, 33.33, 34.667, 34.0, 33.0, 52.0, 34.667, 33.33],
'Data 2 L4W Av': [
np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,
np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 8.0, 7.667, 6.0, 4.33, 3.6667, 4.667,
7.0, 7.33, 4.667, 4.667, 3.6667, 7.667, 4.667, 5.0, 3.6667, 1.0, 3.0, 3.6667, 4.0, 5.33,
5.33, 4.667, 4.0, 4.0, 6.33, 3.0, 1.33, 3.0, 3.33, 6.33, 6.0, 4.0]})
Подробнее здесь: [url]https://stackoverflow.com/questions/79858187/pandas-last-3-weeks-same-day-average-in-groups[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия