Python 在Pandas中查找真实截面的长度

Python 在Pandas中查找真实截面的长度,python,pandas,subset,Python,Pandas,Subset,我有一系列真/假值。我需要找到每次序列切换为True时的点数 例如: 000011100000011000000111110000000 将给我一个[3,2,5,1]的结果 我不知道从哪里开始。我希望熊猫有一些干净的方法来做这件事。这是一个使用itertools的解决方案。groupby: from itertools import groupby mystr = '000011100000001100000001111100010000' s = pd.Series(list(map(in

我有一系列真/假值。我需要找到每次序列切换为True时的点数

例如:

000011100000011000000111110000000

将给我一个[3,2,5,1]的结果


我不知道从哪里开始。我希望熊猫有一些干净的方法来做这件事。

这是一个使用
itertools的解决方案。groupby

from itertools import groupby

mystr = '000011100000001100000001111100010000'

s = pd.Series(list(map(int, mystr)))

res = [len(list(j)) for i, j in groupby(s) if i]

print(res)

# [3, 2, 5, 1]
设置

string = '000011100000001100000001111100010000'
s = pd.Series(list(string)).astype(int)

解决方案
使用
groupby
+
sum
cumsum
技巧

v = s.groupby(s.ne(s.shift()).cumsum()).sum()    
v[v > 0].tolist()
[3, 2, 5, 1]

我相信还有其他方法,但这可以通过简单的循环来解决。只需在列表上迭代,保留一个计数器,计算所有的计数器,并在达到零后重置计数器。你的问题不是很清楚:你想找到它切换为True的索引,还是想找到连续“True”的数目?