Найти среднее значение последних 14 значений в столбце pandas, исключая значения, равные 0

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных, в котором есть столбец значений:

     col1
0   1
1   3
2   6
3   2
4   4
5   0
6   0
7   3
8   4
9   5
10  7
11  5
12  2
13  5
14  4
15  0
16  0
17  2
18  4
19  5
  

Я хочу создать новый столбец в базе данных, который вычисляет среднее значение последних 14 значений в столбце для каждой строки. Однако это должно выполняться при условии, что сумма последних 14 значений делится на количество значений, которые больше 0.

Например, для строки 19 среднее значение будет представлять собой сумму последних 14 значений (включая значение строки 19), деленную на 11, поскольку в последних 14 значениях есть 3 нуля.

Как я могу этого добиться?

Ответ №1:

Вы запрашиваете rolling().sum() :

 N = 14

df['col1'].rolling(N).sum()/df['col1'].ne(0).rolling(N).sum()
  

Вывод:

 0          NaN
1          NaN
2          NaN
3          NaN
4          NaN
5          NaN
6          NaN
7          NaN
8          NaN
9          NaN
10         NaN
11         NaN
12         NaN
13    3.916667
14    4.166667
15    4.272727
16    4.100000
17    4.100000
18    4.100000
19    4.181818
Name: col1, dtype: float64