繁体   English   中英

根据另一列中指定的 window 大小在 pandas 中创建滚动 windows

[英]Create rolling windows in pandas based on window size specified in another column

我有一个 pandas dataframe 我想滚动求和,其中 window 由另一列指定。

例如,

values_to_sum 窗口大小 滚动总和
1 6 17
2 5 16
1 2 4
3 5 19
4 5
6 4
2 3
4 3

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

对于滚动 function,如何逐行调用列window_size

使用列表理解:

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 )加上np.nan大小( ws )超过数据帧的长度( len(df.index) ),则放置 np.nan ; 否则用 iloc 得到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)并使用它来避免在理解中重复寻找它的长度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM