Как вычислить среднее из n строк и вставить ответ в следующие n строк столбца панд? - PullRequest
0 голосов
/ 02 июля 2018

У меня есть еженедельные данные о продажах

Sales           weekNum 
83                    1 
139                   2 
207                   3 
278                   4 
274                   5 
291                   6 
319                   7 
305                   8 

Я хочу вычислить среднее значение за первые 4 недели и вставить его в индекс недели с 5 по 8

И я хочу, чтобы мой выходной набор данных выглядел так, как показано ниже

Sales   weekNum   4-PreviousWeekAverage
83            1 
139           2 
207           3 
278           4 
274           5          176.75
291           6          176.75
319           7          176.75
305           8          176.75

Точно так же я хочу вычислить среднее значение за 8 недель и вставить его в индекс от 5 до 8

Я пытался

for i in [4, 8]:
    newColumnName1 = '%s-PreviousWeekAverage' % i
    df[newColumnName1] = np.nan


    for ix in df.index:
        if ix - i >= 0:

            df.loc[ix, newColumnName1] = np.mean(sampledf.loc[ix-i:ix-1,'Sales'])

Однако мне возвращается скользящая средняя, ​​как показано ниже

Sales   weekNum 4-PreviousWeekAverage
83           1  
139          2  
207          3  
278          4  
274          5            176.75
291          6            224.5
319          7            262.5
305          8            290.5

У меня проблема с циклом, я не могу определить правильный сценарий. Следовательно, оценю помощь.

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

IIUC

df.at[4:,'4-PreviousWeekAverage']=df.Sales.iloc[:4].mean()
df
Out[344]: 
   Sales  weekNum  4-PreviousWeekAverage
0     83        1                    NaN
1    139        2                    NaN
2    207        3                    NaN
3    278        4                    NaN
4    274        5                 176.75
5    291        6                 176.75
6    319        7                 176.75
7    305        8                 176.75
0 голосов
/ 02 июля 2018

groupby на weekNum и transform на mean.

df.groupby((df.weekNum - 1) // 4).Sales.transform('mean').shift(4)

0       NaN
1       NaN
2       NaN
3       NaN
4    176.75
5    176.75
6    176.75
7    176.75
Name: Sales, dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...