Сумма панд следующих n строк - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть DataFrame, который выглядит следующим образом:

             ds         y
0    2017-02-07  0.154941
1    2017-02-08  0.110595
2    2017-02-09  0.044022
3    2017-02-10  0.283902
4    2017-02-11  0.121570
5    2017-02-12  0.000000
6    2017-02-13  0.020265
7    2017-02-14  0.053577
8    2017-02-15  0.080842
9    2017-02-16  0.022043

Я сейчас пытаюсь создать новый столбец 'next_3', который будет суммой значений y в течение следующих 3 дней послетекущий день.

Я добиваюсь этого, используя:

df['next_3'] = df['y'].shift(-3).rolling(3).sum()

, который производит это:

           ds         y     label
0  2017-02-07  0.154941       NaN
1  2017-02-08  0.110595       NaN
2  2017-02-09  0.044022  0.405472
3  2017-02-10  0.283902  0.141836
4  2017-02-11  0.121570  0.073842
5  2017-02-12  0.000000  0.154685
6  2017-02-13  0.020265  0.156462
7  2017-02-14  0.053577       NaN
8  2017-02-15  0.080842       NaN
9  2017-02-16  0.022043       NaN

Я понимаю, почему последние 3 строки имеют значения NaNпоскольку следующие 3 строки недоступны, но почему первые 2 строки имеют значения NaN, когда эти значения могут быть рассчитаны?

Как я могу исправить мой вызов shift().rolling().sum(), чтобы первые две строкитакже рассчитаны?

1 Ответ

0 голосов
/ 18 декабря 2018

Используйте параметр min_periods=1:

df['next_3'] = df['y'].shift(-3).rolling(3, min_periods=1).sum()
print (df)
           ds         y    next_3
0  2017-02-07  0.154941  0.283902
1  2017-02-08  0.110595  0.405472
2  2017-02-09  0.044022  0.405472
3  2017-02-10  0.283902  0.141835
4  2017-02-11  0.121570  0.073842
5  2017-02-12  0.000000  0.154684
6  2017-02-13  0.020265  0.156462
7  2017-02-14  0.053577  0.102885
8  2017-02-15  0.080842  0.022043
9  2017-02-16  0.022043       NaN

Или сначала используйте прокрутку, а затем смещение:

df['next_3'] = df['y'].rolling(3).sum().shift(-3)
print (df)
           ds         y    next_3
0  2017-02-07  0.154941  0.438519
1  2017-02-08  0.110595  0.449494
2  2017-02-09  0.044022  0.405472
3  2017-02-10  0.283902  0.141835
4  2017-02-11  0.121570  0.073842
5  2017-02-12  0.000000  0.154684
6  2017-02-13  0.020265  0.156462
7  2017-02-14  0.053577       NaN
8  2017-02-15  0.080842       NaN
9  2017-02-16  0.022043       NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...