Как найти среднюю разницу в скользящем окне в кадре данных панд? - PullRequest
1 голос
/ 20 апреля 2019

У меня есть следующий фрейм данных:

    value  year
0       9  2011
1       8  2011
2       7  2011
3       6  2011
4       5  2011
5       4  2011
6       3  2011
7       2  2011
8       8  2011
9       2  2011
10      0  2011
11      5  2011

Мне нужен средний столбец, который получает среднюю разницу предыдущих 7 значений в столбце значений, например, для индекса 7, я хочу: ((9-8) + (8-7) + (7-6) + (6-5) + (5-4) + (4-3))/6.

Не знаю, что делать после df['value].rolling(7).Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 20 апреля 2019

Использовать Series.diff с Series.shift и переходить на 6 с mean:

print (((9-8) + (8-7) + (7-6) + (6-5) + (5-4) + (4-3))/6)
1.0
print (((8-7) + (7-6) + (6-5) + (5-4) + (4-3) + (3-2))/6)
1.0
print (((7-6) + (6-5) + (5-4) + (4-3) + (3-2) + (2-8))/6)
-0.16666666666666666
print (((6-5) + (5-4) + (4-3) + (3-2) + (2-8) + (8-2))/6)
0.6666666666666666

df['new'] = df['value'].diff(-1).shift().rolling(6).mean()
print (df)
    value  year       new
0       9  2011       NaN
1       8  2011       NaN
2       7  2011       NaN
3       6  2011       NaN
4       5  2011       NaN
5       4  2011       NaN
6       3  2011  1.000000
7       2  2011  1.000000
8       8  2011 -0.166667
9       2  2011  0.666667
10      0  2011  0.833333
11      5  2011 -0.166667

При необходимости прокатки 7:

print (((9-8) + (8-7) + (7-6) + (6-5) + (5-4) + (4-3) + (3-2))/7)
1.0
print (((8-7) + (7-6) + (6-5) + (5-4) + (4-3) + (3-2) + (2-8))/7)
0.0
print (((7-6) + (6-5) + (5-4) + (4-3) + (3-2) + (2-8  + (8-2)))/7)
0.7142857142857143
print (((6-5) + (5-4) + (4-3) + (3-2) + (2-8) + (8-2) + (2+0))/7)
0.8571428571428571

df['new'] = df['value'].diff(-1).shift().rolling(7).mean()
print (df)
    value  year       new
0       9  2011       NaN
1       8  2011       NaN
2       7  2011       NaN
3       6  2011       NaN
4       5  2011       NaN
5       4  2011       NaN
6       3  2011       NaN
7       2  2011  1.000000
8       8  2011  0.000000
9       2  2011  0.714286
10      0  2011  0.857143
11      5  2011  0.000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...