Применить индивидуальную функцию после группировки по - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь проанализировать поведение пользователя на основе журнала пользователя в системе. Журнал с сервера имеет несколько столбцов, как показано ниже (упрощенно):

user_id - время - service_type

1 --- 1534889600 --- A

2 --- 1534889696 --- B

2 --- 1534890148 --- B

1 --- 1534890243 --- А

1 --- 1534890496 --- A

1 --- 1534890516 --- B

2 --- 1534890924 --- A

1 --- 1534891115 --- A

1 --- 1534891136 --- А * * тысяча двадцать-одна * 2 * 1 022 --- 1534891372 --- B * * тысячу двадцать-три

«время» соответствует времени Unix, а «тип_службы» - это услуга, которую пользователь приобрел за определенную отметку времени (зарегистрированную как «время»). После окончания периода использования пользователям необходимо повторно выкупить. Пользователи не могут одновременно использовать две разные услуги - им нужно переключаться.

Я пытаюсь получить максимальное время пребывания в одной и той же службе конкретным пользователем. Например, это для user_id == 1

user_id - время - service_type

1 --- 1534889600 --- A

1 --- 1534890243 --- A

1 --- 1534890496 --- A

1 --- 1534890516 --- B

1 --- 1534891115 --- A

1 --- 1534891136 --- A

Таблица возврата должна быть:

user_id - service_type - longest_stay

1 --- --- 916

1 --- B --- 599

916 рассчитывается по времени [3] - время [0], а 599 рассчитывается по времени [4] - время [3]. Существует другой временной интервал времени [5] - время [4] для услуги A, но значение равно 21, следовательно, не самое длительное пребывание для службы A (предположим, что последняя запись очень близка к текущей отметке времени). Ожидается, что окончательный результат для всего анализа будет следующим:

user_id - service_type - longest_stay

1 --- --- 916

1 --- B --- 599 * * одна тысяча пятьдесят-семь * +1058 * 2 --- --- х

2 --- B --- х

* * 3 тысячи шестьдесят-два --- --- х

3 --- B --- х

Я всего несколько месяцев в Python, поэтому изо всех сил пытаюсь справиться с этим спор данных. Набор данных содержит более миллиона строк, 150k уникальных user_id и дюжину service_type. Стартап слишком мал, чтобы иметь профессионального исследователя данных. Основатель спросил, могу ли я временно надеть шляпу в этот период :(.

Я пробовал группировать по методу, используя agg. Хорошо сочетается с простыми вычислениями, такими как count, sum, max. Тем не менее, я не знаю, как проверить, есть ли изменение в службе, чтобы инициировать вычисление того, как долго пользователь оставался в той же службе до переключения.

Существует также сложная вещь для первой записи пользователя, где нет предыдущей записи для сравнения, если есть разница в услугах.

Я нашел близкую тему, которая в некоторой степени относится к моей. Этот счетчик рассчитывает самые долгие дни использования пользователя.

Найти самый длинный ряд последовательных нулей для каждого пользователя в кадре данных

Буду очень признателен за любые указания и объяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...