我试图在某个日期之前从数据框中找到连续绿色收盘价的数量
输入:
Ticker Date Close
0 AAPL 20200501 1.5
1 AAPL 20200502 1.2
2 AAPL 20200503 1.3
3 AAPL 20200504 1.3
4 AAPL 20200505 1.4
5 AAPL 20200506 1.5
在这个例子中,我想知道连续收盘价高于前一天20200507的收盘价
期望输出:
2
下面是示例数据帧的代码
import pandas as pd
df1 = pd.DataFrame({'Ticker': ['AAPL', 'AAPL', 'AAPL', 'AAPL', 'AAPL', 'AAPL'],
'Date': [20200501, 20200502, 20200503, 20200504, 20200505, 20200506],
'Close': [1.5, 1.2, 1.3, 1.3, 1.4, 1.5]})
print(df1)
如果你想知道最长连胜的长度,@Quang-Hoang-Answer将起作用。 如果您希望获得当前连续天数的长度,则以下选项适用:
编辑: 如果您有日期在
20200507
之后的行,您可以这样调整:Edit2: 为什么是
df['Close'].diff() <= 0
而不是df['Close'].diff() > 0
这就是我们想要了解的:
这里有3连胜,第一连胜结束于1连胜之后。第二天,第三天(指数2-3)后的第二天结束,最后一个连胜一直持续到结束
为了证明这一点,我们需要一个数字,它在每次失去连胜时都会上升。我们可以在
0s
和1s
的数组上使用.cumsum
来获得这种行为。每次条纹丢失时,应将日期标记为1
我们如何测试条纹是否破裂?通过做与
df['Close'].diff() > 0
相反的事情,即df['Close'].diff() <= 0
。这将产生以下结果:因为内部
True
是一个1
和False
一个0
我们已经有了所需的零和一数组现在我们可以应用
.cumsum
并获得最后一条条纹的长度。因为True
已经被视为1
,我们可以省略步骤.astype(int)
,直接调用(df['Close'].diff() <= 0).cumsum()
相关问题 更多 >
编程相关推荐