让我们考虑以下系列:
s=pd.Series(data=[100, 110, 120, 150, 110, 90, 80, 70, 90, 95])
我遍历每个项目并执行以下操作:
for i in range(len(s)):
m=max(s[i]-s[i:])
基本上将每个项目与后面的所有项目进行比较,并检索最大值。
我可以这样做:
r=[]
for i in range(len(s)):
m=max(s[i]-s[i:])
r.append(m)
result=pd.Series(r)
但我有种感觉,这是滚动窗口可以做的事情吗?我正在努力使我的代码更简洁一些,并且刚刚开始阅读和探索滚动功能,但我还不能不动手。这个想法似乎是一个反向扩展函数(即随着数据的下降,它需要的数据越来越少)?
如果有人对如何使用滚动/扩展窗口重新格式化代码有想法,请告诉我。
请您参考如下方法:
您可以在 s 上使用 numpy.minimum.accumulate 反转,然后从 s 中减去它:
import numpy as np
s - np.minimum.accumulate(s[::-1])[::-1]
#0 30
#1 40
#2 50
#3 80
#4 40
#5 20
#6 10
#7 0
#8 0
#9 0
#dtype: int64
