熊猫转发cummax

时间:2017-04-20 22:52:02

标签: python pandas numpy lambda

我想在给定一系列价格数据的情况下找到股票的最大可能回报。鉴于您只能以未来的价格出售,我认为我需要在每一行上设置最高的未来价格:

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

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

此代码确实有效,但需要比pandas.cummax()更长的时间。是否有直接的矢量方式来编码?

2 个答案:

答案 0 :(得分:6)

forward cummax是reverse cummax的同义词:

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

答案 1 :(得分:4)

@ Boud答案的numpy版本将是

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