第二部分第一部分可在此处找到:Click me
大家好,我一直在练习你们帮助我创建的gg功能 - 请参阅第一部分。现在,我意识到函数的输出不是唯一的序列,而是一个总和:例如,一行中的一系列3个正数也显示为连续两个正数的2个系列和3个单个正数。
我们说我得到了这个:
df = pd.DataFrame(np.random.rand(15, 2), columns=["open", "close"])
df['test'] = df.close-df.open > 0
open close test
0 0.769829 0.261478 False
1 0.770246 0.128516 False
2 0.266448 0.346099 True
3 0.302941 0.065790 False
4 0.747712 0.730082 False
5 0.382923 0.751792 True
6 0.028505 0.083543 True
7 0.137558 0.243148 True
8 0.456349 0.649780 True
9 0.041046 0.163488 True
10 0.291495 0.617486 True
11 0.046561 0.038747 False
12 0.782994 0.150166 False
13 0.435168 0.080925 False
14 0.679253 0.478050 False
df.test
Out[113]:
0 False
1 False
2 True
3 False
4 False
5 True
6 True
7 True
8 True
9 True
10 True
11 False
12 False
13 False
14 False
作为输出,我希望连续的True系列的唯一数量;类似的东西:
1: 1
2: 0
3: 0
4: 0
5: 0
6: 1
7: 0
8: 0
到目前为止我已尝试过:
(green.rolling(x).sum()>x-1).sum() #gives me how many times there is a series of x True in a row; yet, this is not unique as explained beforehand
但是,我不认为滚动是这里的解决方案......
再次感谢您的帮助, CronosVirus00
答案 0 :(得分:1)
您要找的是来自groupby
的itertools
函数和来自Counter
的{{1}}。以下是如何实现您的目标:
collections
输出:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(15, 2), columns=["open", "close"])
df['test'] = df.close-df.open > 0
from itertools import groupby
from collections import Counter
#we group each sequence of True and False
seq_len=[(k,len(list(g))) for k, g in groupby(list(df['test']))]
#we filter to keep only True sequence lenght
true_seq_len= [n for k,n in seq if k == True]
#we count each length
true_seq_count = Counter(true_seq_len)