#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. Просто исправлен ожидаемый результат, извините за путаницу