Я бы хотел применить функцию прокрутки к фрейму данных, который не индексируется по меткам даты, а по относительным неделям после начала эксперимента. В качестве примера это мой стартовый фрейм данных:
df = pd.DataFrame([{'RelWeek': 3, 'id': 33, 'Val_1': 20,'Val_2':0.6,'Val_3':40,'TimeofDay':'MORN'}
,{'RelWeek': 3, 'id': 33, 'Val_1': 40,'Val_2':0.9,'Val_3':27,'TimeofDay':'NOON'}
,{'RelWeek': 3, 'id': 33, 'Val_1': 24,'Val_2':0.65,'Val_3':44,'TimeofDay':'EVE'}
,{'RelWeek': 4, 'id': 33, 'Val_1': 25,'Val_2':0.34,'Val_3':55,'TimeofDay':'MORN'}
,{'RelWeek': 4, 'id': 33, 'Val_1': 21,'Val_2':0.61,'Val_3':34,'TimeofDay':'NOON'}
,{'RelWeek': 4, 'id': 33, 'Val_1': 25,'Val_2':0.67,'Val_3':21,'TimeofDay':'EVE'}
,{'RelWeek': 5, 'id': 33, 'Val_1': 20,'Val_2':0.6,'Val_3':40,'TimeofDay':'MORN'}
,{'RelWeek': 5, 'id': 33, 'Val_1': np.nan,'Val_2':np.nan,'Val_3': np.nan,'TimeofDay':'NOON'}
,{'RelWeek': 5, 'id': 33, 'Val_1': 25,'Val_2':0.68,'Val_3':48,'TimeofDay':'EVE'}
,{'RelWeek': 3, 'id': 33, 'Val_1': 20,'Val_2':0.6,'Val_3':40,'TimeofDay':'MORN'}
,{'RelWeek': 3, 'id': 33, 'Val_1': 40,'Val_2':0.9,'Val_3':27,'TimeofDay':'NOON'}
,{'RelWeek': 2, 'id': 34, 'Val_1': 24,'Val_2':0.65,'Val_3':44,'TimeofDay':'EVE'}
,{'RelWeek': 2, 'id': 34, 'Val_1': 25,'Val_2':0.34,'Val_3':55,'TimeofDay':'MORN'}
,{'RelWeek': 2, 'id': 34, 'Val_1': 21,'Val_2':0.61,'Val_3':34,'TimeofDay':'NOON'}
,{'RelWeek': 3, 'id': 34, 'Val_1': 25,'Val_2':0.67,'Val_3':21,'TimeofDay':'EVE'}
,{'RelWeek': 3, 'id': 34, 'Val_1': 20,'Val_2':0.6,'Val_3':40,'TimeofDay':'MORN'}
,{'RelWeek': 3, 'id': 34, 'Val_1': 25,'Val_2':0.68,'Val_3':48,'TimeofDay':'EVE'}])
df
RelWeek TimeofDay Val_1 Val_2 Val_3 id
0 3 MORN 20.0 0.60 40.0 33
1 3 NOON 40.0 0.90 27.0 33
2 3 EVE 24.0 0.65 44.0 33
3 4 MORN 25.0 0.34 55.0 33
4 4 NOON 21.0 0.61 34.0 33
5 4 EVE 25.0 0.67 21.0 33
6 5 MORN 20.0 0.60 40.0 33
7 5 NOON NaN NaN NaN 33
8 5 EVE 25.0 0.68 48.0 33
9 3 MORN 20.0 0.60 40.0 33
10 3 NOON 40.0 0.90 27.0 33
11 2 EVE 24.0 0.65 44.0 34
12 2 MORN 25.0 0.34 55.0 34
13 2 NOON 21.0 0.61 34.0 34
14 3 EVE 25.0 0.67 21.0 34
15 3 MORN 20.0 0.60 40.0 34
16 3 EVE 25.0 0.68 48.0 34
Я хочу сделать 3 вещи сейчас
- groupby ('id', Timeof Day ')
- Возьмите максимальное и минимальное значения RelWeek для каждого идентификатора и переберите RelWeek. Важно отметить, что относительная неделя отличается для каждого идентификатора. Реализовать функцию прокрутки для Window = 3 или (гибкое число) в диапазоне от минимального до максимального значения Iter
- вывод функции прокрутки должен выглядеть как - «Исходный столбец name_TimeofDay_function» (Под функцией я подразумеваю агрегатфункция применяется к скользящему окну, например, Min, Max, Stdev, Mean и т. д.)
OUTPUT : (Ниже показано, как должен выглядеть идеальный выводНапример, в данный момент числа являются просто фиктивными числами и не отражают фактическое среднее значение или стандартное значение и т. д. Имена столбцов действительно отражают то, каким должно быть содержимое столбца. Любой альтернативный способ вывода, если он дает мнеинформация для вышеуказанных требований также работает
Output_df
Val_1_EVE_Mean Val_1_EVE_Stdev Val_1_MORN_Mean Val_1_MORN_Stdev \
0 24.6 24.6 21.6 21.6
1 24.6 24.6 21.6 21.6
2 24.6 24.6 21.6 21.6
3 24.6 24.6 21.6 21.6
4 24.6 24.6 21.6 21.6
5 24.6 24.6 21.6 21.6
Val_1_NOON_Mean Val_1_NOON_Stdev Val_2_EVE_Mean Val_2_EVE_Stdev \
0 33.6 33.6 24.6 24.6
1 33.6 33.6 24.6 24.6
2 33.6 33.6 24.6 24.6
3 33.6 33.6 24.6 24.6
4 33.6 33.6 24.6 24.6
5 33.6 33.6 24.6 24.6
Val_2_MORN_Mean Val_2_MORN_Stdev Val_2_NOON_Mean Val_2_NOON_Stdev \
0 0.51 0.51 33.6 33.6
1 0.51 0.51 33.6 33.6
2 0.51 0.51 33.6 33.6
3 0.51 0.51 33.6 33.6
4 0.51 0.51 33.6 33.6
5 0.51 0.51 33.6 33.6
Val_3_EVE_Mean Val_3_EVE_Stdev Val_3_MORN_Mean Val_3_MORN_Stdev \
0 24.6 24.6 21.6 21.6
1 24.6 24.6 21.6 21.6
2 24.6 24.6 21.6 21.6
3 24.6 24.6 21.6 21.6
4 24.6 24.6 21.6 21.6
5 24.6 24.6 21.6 21.6
Val_3_NOON_Mean Val_3_NOON_Stdev Window id
0 33.6 33.6 [3, 4, 5] 33
1 33.6 33.6 [4, 5, 6] 33
2 33.6 33.6 [5, 6, 7] 33
3 33.6 33.6 [2, 3, 4] 34
4 33.6 33.6 [3, 4, 5] 34
5 33.6 33.6 [4, 5, 6] 34
Заранее спасибо экспертам, которые могут дать мне некоторое руководство в этом