Функция для определения окна в скользящей функции - PullRequest
0 голосов
/ 07 мая 2018

У меня есть фрейм данных, в котором я хочу применить скользящее среднее к столбцу чисел, состоящим из 3 пар, где я хочу, чтобы в среднее значение входили только 4 уникальных значения. Допустим, мой фрейм данных выглядит так:

     Group  Column to roll    
       1       9
       2       5
       2       5
       2       4
       2       4
       2       4
       2       3
       2       3
       2       3
       2       6
       2       6
       2       6
       2       8

Поскольку я хочу, чтобы 4 уникальных значения вошли в среднее значение, но все значения имели одинаковый вес и находились в одной группе, мой ожидаемый результат (при условии, что мне нужно 4 уникальных значения) будет:

         Group    Output   
            1       nan
            2       nan
            2       nan
            2       nan
            2       nan
            2       nan
            2       nan
            2       nan
            2       nan
            2     (6+3+4+5)/4
            2     (6+3+4+5)/4
            2     (6+3+4+5)/4
            2     (8+6+3+4)/4

Есть идеи, как это сделать?

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете попробовать что-то вроде этого:

df['Column to roll'].drop_duplicates().rolling(4).mean().reindex(df.index).ffill()

Вывод:

0      NaN
1      NaN
2      NaN
3      NaN
4      NaN
5      NaN
6      NaN
7      NaN
8     4.50
9     4.50
10    4.50
11    5.25
Name: Column to roll, dtype: float64

Редактировать вопрос изменен

df_out = df.groupby('Group')['Column to roll']\
           .apply(lambda x: x.drop_duplicates().rolling(4).mean()).rename('Output')

df.set_index('Group',append=True).swaplevel(0,1)\
  .join(df_out, how='left').ffill().reset_index(level=1, drop=True)

Вывод:

       Column to roll  Output
Group                        
1                   9     NaN
2                   5     NaN
2                   5     NaN
2                   4     NaN
2                   4     NaN
2                   4     NaN
2                   3     NaN
2                   3     NaN
2                   3     NaN
2                   6    4.50
2                   6    4.50
2                   6    4.50
2                   8    5.25
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...