Python Pandas在窗口顶部滚动总和值

时间:2018-02-25 17:05:06

标签: python pandas dataframe rolling-sum

我想使用Pandas的滚动方法。我需要稍微调整,但是,我希望'值'放在'窗口'的顶部。

目前,我正在使用它:

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循环)执行此操作,我只是希望使用pandas使用数据框来实现它。

提前谢谢

1 个答案:

答案 0 :(得分:1)

使用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