查找最大周期的“ TRUE”布尔值

时间:2019-08-07 10:06:25

标签: python pandas

  

我需要计算布尔值中“ TRUE”的最大周期

我有一个带有几个TRUE序列的布尔系列。我希望能够确定TRUE值的最大周期。

例如:[0,0,1,1,0,0,0,0,0,0,1,1,1,1,1]

我想要一个循环:[10,14]

我的第一种方法是逐个元素比较并获取每个真实值的索引。我看到的问题是,我正在使用相当大的数据集,因此恐怕会花费很长时间。

你们还有其他可行的想法吗?

谢谢:)

2 个答案:

答案 0 :(得分:6)

一个无循环的可能解决方案是对连续的createFormControlsprivate _createControlsCategories(categories) { const categoriesGroup: FormGroup = this.filterForm.get('categories') as FormGroup; categoriesGroup.controls = {}; for (const cat of categories) { categoriesGroup.addControl(cat.id_remote, new FormControl(false)); } s进行计数并获得索引最大值,最后为1 s个组的开始添加最大值:

True

使用1的另一个想法-使用s = pd.Series([0,0,1,1,0,0,0,0,0,0,1,1,1,1,1]) print (s) a = s == 1 b = a.cumsum() c = b.sub(b.mask(a).ffill().fillna(0)).astype(int) print (c) 0 0 1 0 2 1 3 2 4 0 5 0 6 0 7 0 8 0 9 0 10 1 11 2 12 3 13 4 14 5 dtype: int32 m = c.max() idx = c.index[c == m] print (idx) Int64Index([14], dtype='int64') out = list(zip(idx - m + 1, idx)) print (out) [(10, 14)] 为组创建列表,并枚举计数器,然后获取最大长度的列表并获取最小和最大索引:

itertools.groupby

答案 1 :(得分:1)

您似乎必须以某种方式遍历整个数据集。但是您不需要每个True值的索引。您只需要最长条形中最后一个的索引即可。

请注意,如果有平局,只会打印最新的。

using (var stream = new MemoryStream())
{
    CreateWorkbook(stream);
    stream.Seek(0, SeekOrigin.Begin);
    var driveItem = await graphClient.Me
            .Drive
            .Root
            .ItemWithPath("SampleWorkbook1.xlsx")
            .Content
            .Request()
            .PutAsync<DriveItem>(stream);
    }