窗口顶部的Python Pandas滚动总和位值

标签 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 在数据帧中执行此操作。

提前致谢

最佳答案

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

相关文章:

python - 用于捕获元素 textContent 的正则表达式

python - 对于每一行,找到第 n 个非 NaN 元素的列的最快方法是什么?

r - 基于R中列中连续值的条件插入行

python - 如何使用通过 pandas 从 csv 读取的值填充数组?

Python 在特定目录模式中搜索文件名模式

python - Sphinx,最佳实践

python - 如何处理 Selenium 中的奇怪字符? 'utf8' 编解码器无法解码位置 0 中的字节 0xc3 :

python - 按用户定义的月份跨度对 pandas dataFrame 进行分组

python - 提取数据帧中第一个值和最后一个值之间的最大连续缺失值

python - 如何计算 python pandas 中的行而不是值?