python - 在 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个连续上升的行。
谢谢你的帮助 (-:
解决方案
尝试:.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
推荐阅读
- c++ - 为什么我们需要 std::initializer_list 的私有构造函数?
- powershell - DataBricks API Powershell
- asp.net-core - 使用 .NET Core 在 Mac OS 上进行 Windows 身份验证
- excel - 将宏从一个 Excel 工作表添加到另一个工作表
- javascript - node.js tmi.js twitch bot 对象返回 [object, Object]
- git - `git branch -a` 的输出中的颜色是什么意思?
- apache-spark - yaml 构造等效于 spark-submit 命令
- ios - 无法在通知扩展程序和主应用程序之间共享数据
- google-analytics - Google Analytics 4 API - 缺少 dateHourMinutes
- python - 如何根据列的值标记熊猫中的数据在另一列中具有相似的值