Я хотел бы знать, как сделать дополнительный столбец в приведенном ниже кадре данных, который будет равен 1, когда в столбце возраста 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
Как я мог это сделать? Спасибо
Сначала сравните значения по Series.gt
для >
, затем создайте последовательные группы по shift
с 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) & 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
@Capie - Можно ли создать новый вопрос? Потому что нелегко ответить без данных.
Еще один вопрос: что, если бы у меня был индекс с часами (% Y% m% d % H% M% S), и я хотел бы получить 1 возраст> 35 в течение 2 последовательных дней? (учитывайте, что дата индекса увеличился на 1 час?