【问题标题】:How can I find number of GROUP of consecutive 1s in a binary number如何在二进制数中找到连续 1 的 GROUP 数量
【发布时间】:2021-03-30 13:31:43
【问题描述】:

我有一个 pandas DataFrame,它的行中包含 1 和 0。我想计算我的 DataFrame 中连续 1 组的数量。我再说一遍,我不是在问连续 1 的数量,网上有很多关于它的例子。

更准确地说:

假设我的 pd.DataFrame 的行是:

index value
0  0
1  1
2  1
3  0
4  0
5  1
6  0
7  1
8  0
9  1

我希望输出为 4

【问题讨论】:

    标签: python pandas binary


    【解决方案1】:

    尝试:

    只有在开头或结尾没有 1 时才有效。

    df['value'].diff().eq(1).sum()
    

    在系列的顶部和底部添加 0:

    pd.concat([pd.Series([0]), df.value, pd.Series([0])]).diff().eq(1).sum()
    

    4
    

    【讨论】:

      【解决方案2】:

      也许你可以使用itertools.groupby:

      >>> import pandas as pd
      >>> from itertools import groupby
      >>> d = {'value': [0, 1, 1, 0, 0, 1, 0, 1, 0, 1]}
      >>> df = pd.DataFrame(data=d)
      >>> df
         value
      0      0
      1      1
      2      1
      3      0
      4      0
      5      1
      6      0
      7      1
      8      0
      9      1
      >>> sum(k for k, _ in groupby(df['value'])) 
      4
      

      或者,如果密钥可以是 0/1 以外的其他内容,或者您​​想要更明确:

      >>> sum(1 for k, _ in groupby(df['value']) if k == 1)
      4
      

      【讨论】:

      • 非常感谢!它完全按照预期工作
      • 如果你也能解释一下这行代码的作用,那就太好了。我对 Python 有点陌生,你使用的语法对我来说有点陌生..
      • 我使用了一种叫做理解的东西,docs do a much better job explaining what they are than I could。同样,请务必点击上面的itertools.groupby 链接。最后,如果这没有帮助,您还可以在 YouTube/Google/DuckDuckGo/Bing 上搜索更多资源/说明。
      【解决方案3】:

      将值转换为 list ,然后执行以下操作: 这是我的想法,您可能可以找到更有效的方法来做到这一点

      Countconsecutiveone=0
      i=0
      prv_is_one=0
      While i<len(Newlist):
       if Newlist[i]==1 and prv_is_one==0:
             Countconsecutiveone+=1
             prv_is_one=1
       elif Newlist[i]==0 and prv_is_one==1:
                 prv_is_one=0
       i+=1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-31
        • 2015-05-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-17
        • 1970-01-01
        • 2015-11-07
        相关资源
        最近更新 更多