#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 — Возможно ли создать новый вопрос? Потому что нелегко отвечать без данных.