我试图计算股票收益数据的连续上涨天数 – 所以如果正日是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)
我猜我在整个列表中循环太多次了.有没有一种很好的Pythonic方法可以实现我想要的,而只需要浏览一次数据?我自己可以写一个循环,但想知道是否有更好的方法.
谢谢!
解决方法:
为什么对超pythonic做事的痴迷?可读性效率胜过“leet hackerz风格”.
我只是这样做:
a = [0,0,1,1,1,0,0,1,0,1,1]
b = [0,0,0,0,0,0,0,0,0,0,0]
for i in range(len(a)):
if a[i] == 1:
b[i] = b[i-1] + 1
else:
b[i] = 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。