2017-04-20 76 views
2

我想找到一系列價格數據中股票的最大可能回報。既然你可以在未來的價格只賣,我想我需要需要把未來的最高價格在每行:熊貓前鋒cummax

def maxf(idx): 
    return prc[idx:].bid.max() 

prc['MaxF'] = prc.index.map(lambda x: maxf(x)) 

此代碼的工作,但它花費的時間比pandas.cummax長得多()。有沒有直接的矢量方式來編碼?

回答

5

前進cummax反向cummax的代名詞:

prc.bid[::-1].cummax()[::-1] 
+2

/甩頭拳頭....在:-) – piRSquared

+1

小調總支持定時:此反轉即使我們是整體框架只打算使用投標欄。也許可以將'.bid'移到左邊? – DSM

+0

@DSM完成,謝謝! – Boud

4

一個numpy版@ Boud的答案會是

prc.assign(MaxF=np.maximum.accumulate(prc.bid.values[::-1])[::-1]) 

考慮數據框prc

np.random.seed([3,1415]) 
prc = pd.DataFrame(dict(bid=np.random.rand(10))) 

prc 

     bid 
0 0.444939 
1 0.407554 
2 0.460148 
3 0.465239 
4 0.462691 
5 0.016545 
6 0.850445 
7 0.817744 
8 0.777962 
9 0.757983 

然後:

prc.assign(MaxF=np.maximum.accumulate(prc.bid.values[::-1])[::-1]) 

     bid  MaxF 
0 0.444939 0.850445 
1 0.407554 0.850445 
2 0.460148 0.850445 
3 0.465239 0.850445 
4 0.462691 0.850445 
5 0.016545 0.850445 
6 0.850445 0.850445 
7 0.817744 0.817744 
8 0.777962 0.777962 
9 0.757983 0.757983 

在小數據

enter image description here