【问题标题】:how to get max count of consecutive 1 in column pandas如何获得熊猫列中连续1的最大计数
【发布时间】:2021-09-30 11:15:51
【问题描述】:

我有一个列 Flag1 的数据框,我想检查列标志值 1 是否连续出现最大次数

这是数据框和输出格式

df = pd.DataFrame({'flag':[1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1]}) 
df_out = pd.DataFrame({'max_count':[3]})

【问题讨论】:

    标签: python pandas numpy pandas-groupby


    【解决方案1】:

    解决方案pandas

    m = df['flag'].eq(1)
    max(m[m].groupby((~m).cumsum()).sum())
    

    解决方案itertools.groupby

    from itertools import groupby
    
    max(sum(g) for k, g in groupby(df['flag']) if k == 1)
    

    结果

    3
    

    【讨论】:

    • 我非常喜欢 itertools 解决方案 ;)
    【解决方案2】:

    我们可以模仿itertools.groupby style grouping using df.shift +df.ne

    m = df['flag'].eq(1)
    g = df['flag'].ne(df['flag'].shift()).cumsum()[m]
    
    df[m].groupby(g).count().max()
    
    # flag    3
    # dtype: int64
    

    【讨论】:

    • 我喜欢这个解决方案。赞成。如果我们要在最后一行代码中使用df[m],我们可以简化g 的定义而不用[m] 选择吗?
    • @SeaBean 谢谢。分组数组长度应该等于df的长度。
    【解决方案3】:

    我提供了一个类似问题的答案here

    你可以这样做:

    s = df['flag']
    
    (s.groupby(((s-s.shift().fillna(0)).eq(1).cumsum()*s))
      .transform(len)*s
    ).max()
    

    输出:3

    【讨论】:

      猜你喜欢
      • 2020-12-23
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多