让我们考虑以下系列:
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)
但我觉得这会是一个滚动窗口可以做的事情?我正在努力使我的代码更清洁,并且刚刚开始阅读和探索关于滚动功能,但我还不能,但我的手指。这个想法看起来像是一个反向扩展函数(即随着数据的下降,它需要越来越少的数据)?
如果有人想知道如何使用滚动/展开窗口重新格式化代码,请告诉我们。
答案 0 :(得分:3)
您可以numpy.minimum.accumulate
使用s
反转,然后从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
答案 1 :(得分:1)
或者我们可以使用$memberCount = count($userlist['members']);
和rolling
min
答案 2 :(得分:1)
使用[::-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())