【问题标题】:Python Pandas rolling sum place value at the top of window窗口顶部的 Python Pandas 滚动总和位置值
【发布时间】:2018-08-05 04:18:52
【问题描述】:

我想使用 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 的数据框来做到这一点。

提前谢谢你

【问题讨论】:

    标签: python pandas dataframe rolling-sum


    【解决方案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
    

    【讨论】:

    • 这太棒了!工作完美!谢谢你。我考虑过使用 shift,但我想我没有足够努力。我虽然 shift 是水平的而不是垂直的。
    • 我接受了答案。我无法投票,因为我没有足够的声望点
    猜你喜欢
    • 2018-08-16
    • 1970-01-01
    • 2012-03-13
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多