#python #pandas #group-by
Вопрос:
У меня есть данные, которые я хочу найти последовательность для определенного события на основе login_status и другого значения категории.
user_id content_id login_status
1 2 not login
1 3 not login
1 4 login
2 2 login
2 3 login
и я хочу сделать колонку последовательности такой
user_id content_id login_status sequence
1 2 not login 1
1 3 not login 1
1 4 login 2
2 2 login 1
2 3 login 1
поэтому я хочу создать последовательность, когда пользователь смотрит, когда пользователь входит в систему, последовательность равна 2
это код, который я пробовал
df1['Seq'] = df1.groupby((df1[['user_id', 'login_status']] != df1[['user_id', 'login_status']].shift(1)).any(axis=1).cumsum()).cumcount() 1
но сумма транса при входе в систему не меняется
как решить эту проблему
Комментарии:
1. Каков ваш ожидаемый результат?
2. последовательность, в которой пользователи входят в систему, не входя в систему, составляет 2
Ответ №1:
Я полагаю, вам нужно что-то подобное, в котором используется шаблон shift-cumsum:
df.assign(
sequence=df.groupby(['user_id'], sort=False)
.apply(lambda x: (x['login_status'] != x['login_status'].shift()).cumsum())
.values
)
Это приведет к увеличению последовательности для user_id
каждого из login_status
изменений.
Комментарии:
1. ах, я вижу, вы разделяете процесс на два процесса, любое спасибо, проблема решена