Скользящая сумма дней в текущем состоянии — Python (Панды)

#python #pandas #dataframe #rolling-computation

Вопрос:

Я пытаюсь найти количество дней, в течение которых пользователь находился в просроченном статусе. Данные расположены следующим образом:

идентификатор пользователя subscription_event отметка времени подписания_вент_времени
A заряжено успешно 2020-09-18 13:21:10
A заряжено успешно 2020-09-18 13:21:10
A подписка_вент_паст_дуе 2020-10-18 13:22:00
A подписка_past_due 2020-11-18 13:22:00
A заряжено успешно 2020-11-30 14:18:34
B заряжено успешно 2021-12-01 13:01:53
B подписка_вент_паст_дуе 2021-01-01 15:26:33
B заряжено успешно 2021-01-15 12:01:12

В настоящее время у меня есть расширяющееся окно, в котором можно подсчитывать события, разделенные каждым пользователем, но я бы скорее точно определил разницу во времени между каждой меткой времени (т. Е. Общую продолжительность просрочки клиента).

Вот код для текущего расширяющегося окна:

 churnsubset['days_in_status'] = churnsubset.groupby(
    ['customerid', 'subscription_event_timestamp']
)[['subscription_event_timestamp']].transform(lambda x: x.expanding().count())

churnsubset.sort_values(by=['subscription_event_timestamp'])
 

То, что я ожидаю получить в результате, — это:

идентификатор пользователя subscription_event отметка времени подписания_вент_времени дней_паст_день
A заряжено успешно 2020-09-18 13:21:10 0
A заряжено успешно 2020-09-18 13:21:10 0
A подписка_вент_паст_дуе 2020-10-18 13:22:00 0
A подписка_past_due 2020-11-18 13:22:00 31.0
A заряжено успешно 2020-11-19 14:18:34 0
B заряжено успешно 2021-12-01 13:01:53 13.0
B подписка_вент_паст_дуе 2021-01-01 15:26:33 0
B подписка_past_due 2021-01-15 11:02:00 14.0
B заряжено успешно 2021-01-15 12:01:12 0

Может ли кто-нибудь указать мне правильное направление либо в панд, либо, скорее всего, в каком-нибудь цикле?

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

1. Является ли второй кадр данных ожидаемым результатом?

2. второй фрейм данных-это мой текущий вывод, вместо этого ожидаемый вывод должен показывать дни, в которые каждый клиент находился в этом текущем статусе (subscription_event). Вопрос в том, могу ли я увидеть разницу во времени между subscription_went_past_due / subscription_past_due и когда они были успешно списаны?

3. Просто исправлен ожидаемый результат, извините за путаницу