我有一个包含如下列的数据框:
col1
1
1
1
2
2
2
2
1
1
1
1
我想要计算col1中每个值连续出现次数超过某个阈值的次数。因此,如果阈值为0,则输出应类似于:
1: 2
2: 1
如果阈值为3,则输出应该如下所示:
1: 1
2: 1
我知道可以循环列值并跟踪连续的链来实现,但我想知道是否有一种pandas的方法可以更快地完成这项工作?
这里介绍一种使用diff
和cumsum
来创建额外键的方式。
s=df.groupby([df.col1,df.col1.diff().ne(0).cumsum()]).size()
s
Out[198]:
col1 col1
1 1 3
3 4
2 2 4
dtype: int64
thresh=3
s[s>thresh].count(level=0)
Out[201]:
col1
1 1
2 1
dtype: int64
From here
df.col1.diff().ne(0).cumsum() # we bring the continue value into one value
Out[202]:
0 1
1 1
2 1
3 2
4 2
5 2
6 2
7 3
8 3
9 3
10 3
Name: col1, dtype: int32