按组计数(熊猫)

时间:2021-07-18 19:55:00

标签: python pandas numpy

我有 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 +

1 个答案:

答案 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()创建'-'记录组,groupbycumcount是该组中的元素,第一个元素是'+',cumcount从零开始。因此,'+--' 将变为 0、1、2。现在,求差异以找出 '-' 变为 '+' 的位置。

如果这等于 -3,那么我们知道这个组有三个减号,后面跟着一个“+”。

选中 sm==3 以获取您递 '---'、sum 然后除以的所有次数。

相关问题