让我们考虑以下系列:
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)
但是我感觉这将是滚动窗口可以做的事情?我正在尝试使代码更简洁一些,并且刚刚开始阅读和探索滚动功能,但是我只能对此有所了解。这个想法似乎是一种反向扩展功能(即,随着数据下降,它需要越来越少的数据)?
如果有人对如何使用滚动/扩展窗口重新格式化代码有想法,请告诉我。
使用反转初始序列[::-1]
,取累计最小值,然后再次反转。从中减去所得序列s
。
>>> s.sub(s[::-1].cummin()[::-1])
0 30
1 40
2 50
3 80
4 40
5 20
6 10
7 0
8 0
9 0
dtype: int64
如果索引是单调递增的,则可以更明确:
s.sub(s.sort_index(ascending=False).cummin().sort_index())
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句