Python,Pandas,倒置扩展窗口

时间:2017-12-04 23:20:26

标签: python pandas

让我们考虑以下系列:

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)

但我觉得这会是一个滚动窗口可以做的事情?我正在努力使我的代码更清洁,并且刚刚开始阅读和探索关于滚动功能,但我还不能,但我的手指。这个想法看起来像是一个反向扩展函数(即随着数据的下降,它需要越来越少的数据)?

如果有人想知道如何使用滚动/展开窗口重新格式化代码,请告诉我们。

3 个答案:

答案 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())