Идентифицировать последовательные ячейки по значению условия

#python #pandas

#python #pandas

Вопрос:

Я хотел бы знать, как создать дополнительный столбец в приведенном ниже фрейме данных, который будет равен 1, когда в столбце age 3 или более последовательных значений больше 35

Данные

 age
0   12
1   50
2   49
3   29
4   55
5   34
6   23
7   46
8   87
9   39
  

желаемый результат:

    age  flag
0   12     0
1   50     0
2   49     0
3   29     0
4   55     0
5   34     0
6   23     0
7   46     1
8   87     1
9   39     1
  

Как я мог это сделать? Спасибо

Ответ №1:

Сначала сравните значения с помощью Series.gt for > , затем создайте последовательные группы с помощью shift with cumsum , последнюю группировку по группам и получите подсчеты с помощью GroupBy.transform — сравнить по Series.ge и связать с оригиналом s для предотвращения установки 3 последовательных >35 значений, последние заданные значения в целые числа для True/False сопоставления с 1/0 :

 s = df['age'].gt(35)
g = s.ne(s.shift()).cumsum()

df['flag'] = (s.groupby(g).transform('size').ge(3) amp; s).astype(int)
print (df)
   age  flag
0   12     0
1   50     0
2   49     0
3   29     0
4   55     0
5   34     0
6   23     0
7   46     1
8   87     1
9   39     1
  

Комментарии:

1. Еще один вопрос, что, если бы у меня был индекс с часами (%Y%m%d %H%M%S), и я хотел бы получить 1, возраст которого > 35 за 2 дня выполнения? (учтите, что дата индекса увеличивается на 1 час?

2. @Capie — Возможно ли создать новый вопрос? Потому что нелегко отвечать без данных.