【问题标题】:Find length of True sections in Pandas在 Pandas 中查找 True 部分的长度
【发布时间】:2018-04-11 13:29:34
【问题描述】:

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

例如:

000011100000001100000001111100010000

会给我 [3,2,5,1] 的结果

我不知道从哪里开始。我希望 pandas 有一些干净的方法。

【问题讨论】:

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

标签: python pandas subset


【解决方案1】:

设置

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

解决方案
使用 groupby + sumcumsum 技巧

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

【讨论】:

    【解决方案2】:

    这是使用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]
    

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 2022-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 2010-11-03
      • 2011-03-22
      相关资源
      最近更新 更多