【问题标题】:Pandas How to flag consecutive values ignoring the first occurrence熊猫如何标记连续值而忽略第一次出现
【发布时间】:2023-02-20 16:48:02
【问题描述】:

我有以下代码:

data={'id':[1,2,3,4,5,6,7,8,9,10,11],
  'value':[1,0,1,0,1,1,1,0,0,1,0]}
  df=pd.DataFrame.from_dict(data)
  df
  Out[8]: 
      id  value
 0    1      1
 1    2      0
 2    3      1
 3    4      0
 4    5      1
 5    6      1
 6    7      1
 7    8      0
 8    9      0
 9    10     1
10    11     0

我想创建一个标志列,从第二次出现开始用 1 个连续值指示并忽略第一次。

使用实际解决方案:

df['flag'] = 
df.value.groupby([df.value,df.flag.diff().ne(0).cumsum()]).transform('size').ge(3).astype(int)


Out[8]: 
        id  value  flag
    0    1      1     0
    1    2      0     0
    2    3      1     0
    3    4      0     0
    4    5      1     1
    5    6      1     1
    6    7      1     1
    7    8      0     1
    8    9      0     1
    9    10     1     0
   10    11     0     0

虽然我需要这样的解决方案,但第一次出现的情况从第二次开始标记为 0 和 1:

Out[8]: 
        id  value  flag
    0    1      1    0
    1    2      0    0
    2    3      1    0
    3    4      0    0
    4    5      1    0
    5    6      1    1
    6    7      1    1
    7    8      0    0
    8    9      0    1
    9    10     1    0
   10    11     0    0

【问题讨论】:

    标签: python pandas dataframe series flags


    【解决方案1】:

    使用:

    g = df['value'].ne(df['value'].shift()).cumsum()
    df['flag'] = df.groupby(g).cumcount().gt(0).astype(int)
    

    【讨论】:

      猜你喜欢
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 2017-05-04
      • 2018-01-16
      相关资源
      最近更新 更多