Значение Python Pandas для расчета суммы в верхней части окна

64
5

Я хотел бы использовать метод прокатки Панд. Мне нужна небольшая корректировка, однако мне бы хотелось, чтобы "значение" помещалось в верхней части "окна".

В настоящее время я использую это:

self.df['new_col'] = self.df['Zone3'].rolling(4).sum()

Что производит это:

       Date     Time     Period  Zone4  Zone3  new_col
0 2018-02-23 00:00 900 11 2 NaN
1 2018-02-23 00:15 900 11 1 NaN
2 2018-02-23 00:30 900 7 3 NaN
3 2018-02-23 00:45 900 2 0 6.0
4 2018-02-23 01:00 900 3 2 6.0
5 2018-02-23 01:15 900 7 0 5.0
6 2018-02-23 01:30 900 2 4 6.0

Мне бы хотелось:

       Date     Time     Period  Zone4  Zone3  new_col
0 2018-02-23 00:00 900 11 2 6.0
1 2018-02-23 00:15 900 11 1 6.0
2 2018-02-23 00:30 900 7 3 5.0
3 2018-02-23 00:45 900 2 0 6.0
4 2018-02-23 01:00 900 3 2 NaN
5 2018-02-23 01:15 900 7 0 NaN
6 2018-02-23 01:30 900 2 4 NaN

Обратите внимание, что значение суммы находится в начале окна (позиция 1), а не в конце (позиция 4)

Если перекатывание является неправильным методом, отлично, любой метод поможет. Я знаю, как сделать это с помощью "pythonic" (используя цикл for), я просто надеялся сделать это на месте с помощью dataframe, используя pandas.

заранее спасибо

спросил(а) 2021-01-19T22:02:13+03:00 6 месяцев, 2 недели назад
1
Решение
78

Использовать shift:

self.df['new_col'] = self.df['Zone3'].rolling(4).sum().shift(-3)

Или более общий:

N = 4
df['new_col'] = df['Zone3'].rolling(N).sum().shift(-N+1)
print (df)
Date Time Period Zone4 Zone3 new_col
0 2018-02-23 00:00 900 11 2 6.0
1 2018-02-23 00:15 900 11 1 6.0
2 2018-02-23 00:30 900 7 3 5.0
3 2018-02-23 00:45 900 2 0 6.0
4 2018-02-23 01:00 900 3 2 NaN
5 2018-02-23 01:15 900 7 0 NaN
6 2018-02-23 01:30 900 2 4 NaN
N = 2
df['new_col'] = df['Zone3'].rolling(N).sum().shift(-N+1)
print (df)
Date Time Period Zone4 Zone3 new_col
0 2018-02-23 00:00 900 11 2 3.0
1 2018-02-23 00:15 900 11 1 4.0
2 2018-02-23 00:30 900 7 3 3.0
3 2018-02-23 00:45 900 2 0 2.0
4 2018-02-23 01:00 900 3 2 2.0
5 2018-02-23 01:15 900 7 0 4.0
6 2018-02-23 01:30 900 2 4 NaN

ответил(а) 2021-01-19T22:02:13+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема