Функция Pandas для создания последовательных на основе метки

#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. ах, я вижу, вы разделяете процесс на два процесса, любое спасибо, проблема решена