我想用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 在数据帧中执行此操作。
提前致谢
最佳答案
使用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
关于窗口顶部的Python Pandas滚动总和位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48976142/