在pandas数据框中计算连续列值的数量

3

我有一个包含如下列的数据框:

col1
1
1
1
2
2
2
2
1
1
1
1

我想要计算col1中每个值连续出现次数超过某个阈值的次数。因此,如果阈值为0,则输出应类似于:

1: 2
2: 1

如果阈值为3,则输出应该如下所示:
1: 1
2: 1

我知道可以循环列值并跟踪连续的链来实现,但我想知道是否有一种pandas的方法可以更快地完成这项工作?

1个回答

3

这里介绍一种使用diffcumsum来创建额外键的方式。

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

太棒了!所以这还有一个额外的好处,即在第一步中告诉我具体的尺寸是什么,我可以将其绘制出来以获得更好的可视化效果。您,先生,真是个学者和绅士。 - Arkansin
你能否把它分解并解释一下这里的不同组件是如何工作的?对我来说,一行代码总是看起来像魔法。 - Arkansin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接