我有 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 | + |
答案 0 :(得分:1)
试试这个逻辑:
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
然后除以的所有次数。