Python 如何计算一个值重复最小次数的次数

Python 如何计算一个值重复最小次数的次数,python,pandas,Python,Pandas,我有一个有两列的数据框。第一个是时间,从1开始算起 重要的是一堆1和0。我想知道一个特定的n次重复多少次。例如,假设我有100个随机放置的1和0的值,我想知道我有多少次在一行中至少有5个1。这意味着我想知道它重复5、6、7次的次数,或者更多的次数 以前有人做过类似的事情吗?试试: np.random.seed(1234) df=pd.DataFrame(np.random.choice([0,1], 100)) (df.groupby(df[0].ne(1).cumsum().where(df

我有一个有两列的数据框。第一个是时间,从1开始算起

重要的是一堆1和0。我想知道一个特定的n次重复多少次。例如,假设我有100个随机放置的1和0的值,我想知道我有多少次在一行中至少有5个1。这意味着我想知道它重复5、6、7次的次数,或者更多的次数

以前有人做过类似的事情吗?

试试:

np.random.seed(1234)
df=pd.DataFrame(np.random.choice([0,1], 100))

(df.groupby(df[0].ne(1).cumsum().where(df[0] == 1)).count() > 4).sum().values[0]
输出:

2

不那么优雅的方式

df['diff'] = df['Column'].diff()
df = df.fillna(0)
repeats = 0
y = 0
for x in df.itertuples():
    if x.diff == 0:
        y+=1
    else:
        if y >= 5:
            repeats += 1
        y = 0

我使用的是
itertools.groupby
,带有
np.unique

import itertools 

x,y=np.unique([tuple(y) for x , y in itertools.groupby(df[0])],return_counts =True)
x
Out[343]: 
array([(0,), (0, 0), (0, 0, 0), (0, 0, 0, 0, 0, 0, 0, 0),
       (0, 0, 0, 0, 0, 0, 0, 0, 0), (1,), (1, 1), (1, 1, 1), (1, 1, 1, 1),
       (1, 1, 1, 1, 1), (1, 1, 1, 1, 1, 1, 1)], dtype=object)
y
Out[344]: array([13,  6,  3,  1,  1, 14,  5,  3,  1,  1,  1], dtype=int64)
为了更好的展示

df= pd.DataFrame(x.tolist()).assign(Number=lambda x : x.count(1),Unique=y).dropna(1)
df
Out[350]: 
    0  Number  Unique
0   0       1      13
1   0       2       6
2   0       3       3
3   0       8       1
4   0       9       1
5   1       1      14
6   1       2       5
7   1       3       3
8   1       4       1
9   1       5       1
10  1       7       1

你想知道每个重复链的数量、长度甚至位置吗?
考虑以下功能:

def consec_ones_cntr(it, thrshld):
    n = 0
    for i, v in enumerate(it):
        if v:
            n += 1
        else:
            if n >= thrshld:
                yield i-n, n
            n = 0
我可以随意使用@Scottboston示例数据:

# import  numpy as np
# import pandas as pd

# np.random.seed(1234)
# df=pd.DataFrame(np.random.choice([0,1], 100))
那么,该函数的用法将是:

print(list(consec_ones_cntr(df[0], 5)))
导致

# [(7, 5), (70, 7)]

这意味着索引7和11之间有5个,70和76之间有7个。

你能提供一个最小的样本数据集吗?请为这个问题添加样本数据和预期输出。这是一个典型的状态机问题,与典型的设计问题一起出现。在连续6次的情况下,计数是否在第五次重置?计数是否继续发现另一组与第一组重叠?或者,如果有7组,你会发现只有一组还是三组?这非常有效。非常感谢。首先,谢谢你的回答。这太棒了&我一定要用它。但是,我不知道如何读取输出。我知道5和7告诉我我有多少个1,但11和76告诉我什么?它们是1的相关链的最后一个索引,用于指示它们在数组中的位置。然而,由于序列的第一个索引通常是位置的选择指标,我知道您可能只想通过让搜索函数
产生I-n,n
…:)来改变这一点顺便说一句,进行了相应的编辑。