【问题标题】:Create rolling windows in pandas based on window size specified in another column根据另一列中指定的窗口大小在 pandas 中创建滚动窗口
【发布时间】:2021-05-05 15:51:41
【问题描述】:

我有一个 pandas 数据框,我想滚动汇总,其中窗口由另一列指定。

例如,

values_to_sum window_size rolling_sum
1 6 17
2 5 16
1 2 4
3 5 19
4 5 NaN
6 4 NaN
2 3 NaN
4 3 NaN

尝试在滚动函数中调用列window_size 会导致错误ValueError: window must be an integer

我怎样才能为滚动函数逐行调用列window_size

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用列表理解:

    df["rolling_sum"] = [np.nan 
                         if j + ws > len(df.index)
                         else df.values_to_sum.iloc[j: j+ws].sum()
                         for j, ws in enumerate(df.window_size)]
    

    如果当前索引 (j) 加上窗口大小 (ws) 超过数据帧的长度 (len(df.index)),则输入 np.nan;否则使用ilocsum 获取窗口。

    得到

       values_to_sum  window_size  rolling_sum
    0              1            6         17.0
    1              2            5         16.0
    2              1            2          4.0
    3              3            5         19.0
    4              4            5          NaN
    5              6            4          NaN
    6              2            3          NaN
    7              4            3          NaN
    

    注意:您可以预先定义df_length = len(df.index) 并使用它来避免在理解中重复寻找它的长度。

    【讨论】:

      猜你喜欢
      • 2018-12-17
      • 2016-08-10
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多