我有一列(价格),其值随时间变化。从一行到另一行,该值增加,减少或保持不变。我想记录值达到新高的次数。

因此,我添加了一个列currenthigh来跟踪到目前为止的最高值。然后,我添加了另一列currenthigh_prev,这是currenthigh列移动了一行。这样,我可以比较两个值:当前值和上一个值。如果currenthigh > currenthigh_prev,那么我有一个新高,记录在newhighscount中。

我一直在尝试使用.cummax(),这似乎是适当的。

df.loc[df['currenthigh'] > df['currenthigh_shift'], 'newhighscount'] = df['newhighscount'].cummax() + 1


我期望这样:

              datetime      last  currenthigh  currenthigh_shift  **newhighscount**
31 2019-04-02 07:57:33  389.8400       389.84                NaN              0
32 2019-04-02 07:57:33  389.8400       389.84             389.84              0
33 2019-04-02 07:57:33  389.8700       389.87             389.84              **1**
34 2019-04-02 07:57:33  389.8800       389.88             389.87              **2**
35 2019-04-02 07:57:33  389.9000       389.90             389.88              **3**
36 2019-04-02 07:57:33  389.9600       389.96             389.90              **4**
37 2019-04-02 07:57:35  389.9000       389.96             389.96              **4**
38 2019-04-02 07:57:36  389.9000       389.96             389.96              **4**
39 2019-04-02 08:00:00  389.3603       389.96             389.96              **4**
40 2019-04-02 08:00:00  388.8500       389.96             389.96              **4**
41 2019-04-02 08:00:00  390.0000       390.00             389.96              **5**
42 2019-04-02 08:00:01  389.7452       390.00             390.00              **5**
43 2019-04-02 08:00:01  389.4223       390.00             390.00              5
44 2019-04-02 08:00:01  389.8000       390.00             390.00              5


我得到这个:

              datetime      last  currenthigh  currenthigh_shift  newhighscount
31 2019-04-02 07:57:33  389.8400       389.84                NaN              0
32 2019-04-02 07:57:33  389.8400       389.84             389.84              0
33 2019-04-02 07:57:33  389.8700       389.87             389.84              1
34 2019-04-02 07:57:33  389.8800       389.88             389.87              1
35 2019-04-02 07:57:33  389.9000       389.90             389.88              1
36 2019-04-02 07:57:33  389.9600       389.96             389.90              1
37 2019-04-02 07:57:35  389.9000       389.96             389.96              0
38 2019-04-02 07:57:36  389.9000       389.96             389.96              0
39 2019-04-02 08:00:00  389.3603       389.96             389.96              0
40 2019-04-02 08:00:00  388.8500       389.96             389.96              0
41 2019-04-02 08:00:00  390.0000       390.00             389.96              1
42 2019-04-02 08:00:01  389.7452       390.00             390.00              0
43 2019-04-02 08:00:01  389.4223       390.00             390.00              0
44 2019-04-02 08:00:01  389.8000       390.00             390.00              0


基本上,df['newhighscount'].cummax()似乎不返回任何内容。

最佳答案

df['newhighscount'] = df['last'].cummax().diff().gt(0).cumsum()


这将计算最后一列的累积最大值,计算差值(cummax_t-cummax_ {t-1}),检查差值是否大于零,并计算该次数为true的次数。

关于python - 如何增加累积最大值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55521512/

10-12 02:34