我有一个包含0和1的数据帧,我想用Pandas个解决方案(不是itertools,不是python迭代)来计算1组(不介意0).

其他SO帖子建议使用基于shift()/diff()/cumsum()的方法,当数据帧中的前导序列以0开头时,这种方法似乎不起作用.

df = pandas.Series([0,1,1,1,0,0,1,0,1,1,0,1,1]) # should give 4
df = pandas.Series([1,1,0,0,1,0,1,1,0,1,1])     # should also give 4
df = pandas.Series([1,1,1,1,1,0,1])             # should give 2

知道吗?

推荐答案

如果只有0/1,则可以使用:

s = pd.Series([0,1,1,1,0,0,1,0,1,1,0,1,1])

count = s.diff().fillna(s).eq(1).sum()

输出:4(其他两个为42)

然后fillna确保从1开始的序列将被计数

faster alternative

使用差值,计算1,并用第一项更正结果:

count = s.diff().eq(1).sum()+(s.iloc[0]==1)

不同方法的比较:

enter image description here

Python相关问答推荐

根据另一列中的nan重置值后重新加权Pandas列

Pandas 滚动最接近的价值

未删除映射表的行

如何在polars(pythonapi)中解构嵌套 struct ?

numpy卷积与有效

OR—Tools中CP—SAT求解器的IntVar设置值

ThreadPoolExecutor和单个线程的超时

无法连接到Keycloat服务器

Plotly Dash Creating Interactive Graph下拉列表

如何使regex代码只适用于空的目标单元格

Pandas:计算中间时间条目的总时间增量

在matplotlib中使用不同大小的标记顶部添加批注

并行编程:同步进程

用两个字符串构建回文

Python—在嵌套列表中添加相同索引的元素,然后计算平均值

如何设置nan值为numpy数组多条件

将像素信息写入文件并读取该文件

如何在Quarto中的标题页之前创建序言页

为什么在更新Pandas 2.x中的列时,数据类型不会更改,而在Pandas 1.x中会更改?

PyTorch变压器编码器中的填充掩码问题