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

时间:2019-04-08 21:18:43

标签: python pandas

我有一个包含两列的DataFrame。第一个是time,刚从1开始计数。

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

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

4 个答案:

答案 0 :(得分:4)

尝试:

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

答案 1 :(得分:1)

做起来不太优雅。

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

答案 2 :(得分:1)

您是否还想知道每个重复链有多少条,甚至有多久?
考虑以下功能:

redis-server

我可以随时使用@ScottBostons示例数据:

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

然后该函数的用法为:

# 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和11之间有5个,而索引70和76之间有7个。

答案 3 :(得分:0)

我正在使用itertools.groupbynp.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