![](/img/trans.png)
[英]Pandas rolling_max with variable window size specified in a df column
[英]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 得到iloc
并sum
。
要得到
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.