首页 > 解决方案 > 在 Python Pandas 中,搜索有 4 个连续行的值上升的位置

问题描述

我试图弄清楚如何标记价格是 4 加价的一部分的行。“is_consecutive”实际上是标记。

我设法做到了行之间的差异:

df['diff1'] = df['Close'].diff()

但我没能找出哪一行是 4 次涨价的一部分。

我想使用 df.rolling() 。

例子df,

在第 0-3 行,我们需要在 ["is_consecutive"] 列上获得 'True' 的输出,因为连续行上的 ['diff1'] 增加了 4 行。

在第 8-11 行,我们需要在 ["is_consecutive"] 列上获得 'False' 的输出,因为此连续行上的 ['diff1'] 为零。

   Date      Price           diff1    is_consecutive   
0  1/22/20    0               0          True
1  1/23/20    130            130         True
2  1/24/20    144            14          True
3  1/25/20    150            6           True
4  1/27/20    60            -90          False
5  1/28/20    95             35          False
6  1/29/20    100            5           False
7  1/30/20    50            -50          False
8  2/01/20    100            0           False
9  1/02/20    100            0           False
10  1/03/20   100            0           False
11  1/04/20   100            0           False
12  1/05/20   50            -50          False

一般示例:

如果价格 = [30,55,60,65,25]

列表中连续数字的不同形式将是:

diff1 = [0,25,5,5,-40]

所以当 diff1 是 plus 它实际上意味着连续的价格在增加。

我需要标记(在df中)有4个连续上升的行。

谢谢你的帮助 (-:

标签: pythonpandasdataframematplotlibdiff

解决方案


尝试:.rolling使用大小4和最小周期的窗口1

df["is_consecutive"] = (
    df["Price"]
    .rolling(4, min_periods=1)
    .apply(lambda x: (x.diff().fillna(0) >= 0).all())
    .astype(bool)
)
print(df)

印刷:

      Date  Price  is_consecutive
0  1/22/20      0            True
1  1/23/20    130            True
2  1/24/20    144            True
3  1/25/20    150            True
4  1/26/20     60           False
5  1/26/20     95           False
6  1/26/20    100           False
7  1/26/20     50           False

推荐阅读