#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