我试图计算股票收益数据的连续上涨天数 - 所以如果正日是1而负数是0,那么列表y=[0,0,1,1,1,0,0,1,0,1,1]应该返回z=[0,0,1,2,3,0,0,1,0,1,2].
我已经找到了一个在代码行数方面很整洁的解决方案,但速度非常慢:
import pandas
y=pandas.Series([0,0,1,1,1,0,0,1,0,1,1])
def f(x):
return reduce(lambda a,b:reduce((a+b)*b,x)
z=pandas.expanding_apply(y,f)
Run Code Online (Sandbox Code Playgroud)
我猜我在整个列表中循环太多次了.有没有一种很好的Pythonic方法可以实现我想要的,而只需要浏览一次数据?我自己可以写一个循环,但想知道是否有更好的方法.
谢谢!