Панды живут в группах в среднем 3 недели в один и тот же день ⇐ Python

Программы на Python
Anonymous
Панды живут в группах в среднем 3 недели в один и тот же день

Сообщение 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]})


Подробнее здесь: https://stackoverflow.com/questions/798 ... -in-groups

Вернуться в «Python»