Как применить функцию прокрутки, когда время в относительных неделях не является отметкой времени, и применить группу по - PullRequest
0 голосов
/ 04 октября 2019

Я бы хотел применить функцию прокрутки к фрейму данных, который не индексируется по меткам даты, а по относительным неделям после начала эксперимента. В качестве примера это мой стартовый фрейм данных:

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 вещи сейчас

  1. groupby ('id', Timeof Day ')
  2. Возьмите максимальное и минимальное значения RelWeek для каждого идентификатора и переберите RelWeek. Важно отметить, что относительная неделя отличается для каждого идентификатора. Реализовать функцию прокрутки для Window = 3 или (гибкое число) в диапазоне от минимального до максимального значения Iter
  3. вывод функции прокрутки должен выглядеть как - «Исходный столбец 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  

Заранее спасибо экспертам, которые могут дать мне некоторое руководство в этом

...