gpt4 book ai didi

python - 连续绿日

转载 作者:行者123 更新时间:2023-12-04 08:53:01 24 4
gpt4 key购买 nike

我试图在某个日期之前从数据框中找到连续绿色收盘价的数量。
输入:

  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 答案将起作用。
如果您想要当前连续天数的长度,则以下内容将起作用:

df = pd.DataFrame({'Close' : [1.5, 1.2, 1.3, 1.3, 1.4, 1.5]})

streaks = (df['Close'].diff() <= 0).cumsum()
res = sum(streaks == streaks.iloc[-1]) - 1
编辑:
如果您有日期在 20200507 之后的行你可以这样适应:
df_subview = df[df['Date'] < 20200507]
编辑2:
为什么 df['Close'].diff() <= 0而不是 df['Close'].diff() > 0 ?
这就是我们想要得到的:
>>> streaks
0 0
1 1
2 1
3 2
4 2
5 2
这里有 3 个连胜,第一个结束在第一天之后,第二个结束在第三天(索引 2-3)之后,最后一个连胜一直到最后。
为了实现这一点,我们需要在每次连胜时增加一些数字。我们可以使用 .cumsum0s 的数组上和 1s得到这种行为。每次连胜时,日期应标记为 1 .
我们如何测试条纹是否为 splinter ?通过与 df['Close'].diff() > 0 做相反的操作,即 df['Close'].diff() <= 0 .这会产生以下结果:
>>> df['Close'].diff() <= 0
0 False
1 True
2 False
3 True
4 False
5 False
Name: Close, dtype: bool
因为内部 True1False一个 0我们已经有了所需的 0 和 1 数组。
>>> (df['Close'].diff() <= 0).astype(int)
0 0
1 1
2 0
3 1
4 0
5 0
Name: Close, dtype: int64
现在我们可以申请 .cumsum并获得最后一连胜的长度。因为 True已被视为 1我们可以省略这一步 .astype(int)直接调用 (df['Close'].diff() <= 0).cumsum() .

关于python - 连续绿日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63995641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com