我有 5 年的库存日期。我需要这样做:取第 1、2 和 3 年,在连续看到 k 个“下跌日”后,第二天是“上涨日”的概率是多少?例如,如果 k = 3,看到“-、-、-、+”与看到“-、-、-、-”的概率是多少。为 k = 1, 2, 3 计算这个。我玩过 groupby 和 cumsum,但似乎无法正确处理。
例如:
group1 = df[df['True Label'] == "-"].groupby((df['True Label'] != "-").cumsum())
日期 | 真标签 |
---|---|
2019-01-02 | + |
2019-01-03 | —— |
2019-01-04 | + |
2019-01-07 | + |
2019-01-08 | + |
试试这个逻辑:
import pandas as pd
import numpy as np
np.random.seed(123)
s = pd.Series(np.random.choice(['+','-'], 1000))
sm = s.groupby((s == '+').cumsum()).cumcount()
prob = (sm.diff() == -3).sum() / (sm == 3).sum()
prob
输出:
0.43661971830985913
细节:
使用(s == '+').cumsum()
创建组“ - ”记录,groupby
而cumcount
本组中的元素,第一个元素是“+”和cumcount开始零。因此,'+--' 将变为 0、1、2。现在,利用差异找出 '-' 变成 '+' 的位置。
如果这等于 -3,那么我们知道这个组有三个减号,后面跟着一个“+”。
检查sm==3
以达到您使用“---”的所有次数,sum
然后进行除法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句